Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Преобразовать айпи в длинный тип


WebSqlNeederr ©   (2007-08-16 22:46:00) 

есть например стандартный вид айпи 212.42.81.15 а нужно его преобразовать в длинный вид, что то типа 6483746263. Есть ли в Делфи функция?


orinoko   (2007-08-21 14:48:00) [1]

у меня есть такое:

function TIncomModule.AddrTcpToDWORD(SAdr: string;var dwAddr:cardinal):boolean;
var i,p: integer;
   C: word;
begin
result:=false;
dwAddr:=0;
if SAdr='' then exit;
SAdr:=SAdr+'.';
for i:=1 to 4 do
  begin
  p:=pos('.',SAdr);
  if p=0 then exit;
  c:=StrToInt(Copy(SAdr,1,p-1));
  if c>255 then exit;
  dwAddr:=(dwAddr shl 8) + C;
  delete(SAdr,1,p);
  end;
result:=true;
end;

function TIncomModule.DWORDToAddrTcp(dwAddr:cardinal;var SAdr: string):boolean;
var i: integer;
begin
result:=false;
SAdr:='';
for i:=0 to 3 do
  begin
  SAdr:=IntToStr((dwAddr shr (i*8))and 255)+SAdr;
  if i<>3 then SAdr:='.'+SAdr;
  end;
end;


DVM   (2007-08-17 10:47:00) [2]

или альтернатива такая:


function IpToLong(const ip: string): LongInt;
var
 x, i: byte;
 ipx: array[0..3] of byte;
 v: integer;
begin
 Result := 0;
 longint(ipx) := 0;
 i := 0;
 for x := 1 to Length(ip) do
   if ip[x] = '.' then
     begin
       inc(i);
       if i = 4 then exit;
     end
   else
     begin
       if not (ip[x] in ['0'..'9']) then exit;
       v := ipx[i] * 10 + ord(ip[x]) - ord('0');
       if v > 255 then exit;
       ipx[i] := v;
     end;
 result := longint(ipx);
end;


DVM   (2007-08-17 10:46:00) [3]

function InetAddr(const AHost: string): integer;
var
 PHost:PChar;
 HostEnt: PHostEnt;
begin
 if AHost = '' then
   result := INADDR_NONE
 else
   begin
     PHost := PChar(AHost);
     Result := inet_addr(PHost);
     if Result = INADDR_NONE then
       begin
         HostEnt := GetHostByName(PHost);
         if HostEnt <> nil then
           Result := integer(pointer(HostEnt^.h_addr^)^);
       end;
   end;
end;


umbra   (2007-08-17 10:30:00) [4]


> а какой модуль подключить нужно ?
>

winsock


WebSQLNeederr   (2007-08-17 09:29:00) [5]

inet_addr('212.42.81.15'); а какой модуль подключить нужно ?


Anatoly Podgoretsky   (2007-08-17 07:48:00) [6]

> WebSqlNeederr  (16.08.2007 22:46:00)  [0]

Int32 не может хранить 6483746263


easy   (2007-08-16 23:52:00) [7]

inet_addr('212.42.81.15');


Наверх

Титульная страница Поиск, карта сайта Написать письмо