Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.24;
Скачать: CL | DM;

Вниз

Сравнение двух IP-адресов   Найти похожие ветки 

 
Артем К.   (2004-10-08 05:02) [0]

Здравствуйте, уважаемые мастера!

Как сравнить две строки, в которых находятся IP-адреса, т.е. нужно узнать какой IP-адрес больше.

Заранее спасибо!


 
Gero ©   (2004-10-08 05:10) [1]

<, >


 
Артем К.   (2004-10-08 05:17) [2]

Понятно, что при помощи < и >

Например есть некоторые абстрактные адреса:
1.000.000.000 и 000.000.000.1

Как можно эти адреса сравнить, т.е. определить, что
1.000.000.000 > 000.000.000.1


 
Verg ©   (2004-10-08 05:22) [3]

Если речь идет об IPv4, то

ntohl(inet_addr(pchar(IPString1)))  <операция сравнения> ntohl(inet_addr(pchar(IPString2)))


 
SammIk ©   (2004-10-08 05:22) [4]

Переводишь в тип DWORD и сравниваешь
Ищи в мсдн, есть такая ф-я. Или сам напиши.


 
SammIk ©   (2004-10-08 05:23) [5]

Вот все надо разжувать!))


 
Артем К.   (2004-10-08 05:29) [6]

>>SammIk

если бы я сам мог это сделать, то не спрашивал бы. для того форумы и существуют :))


 
Verg ©   (2004-10-08 05:33) [7]

Учти, однако, что если часть(и) IP адреса заданы с лидирующим нулем, то считается, что они заданы в восьмиричной СС.
Так работает inet_addr


 
Klopan ©   (2004-10-08 20:24) [8]

вот функция преобразующая ip в hex


function IP2HEX(OrgIP:string):string;
var
 // Сохраняем оригинальное значение IP адреса
 OrgVal: string;
 // части оригинального IP
 O1,O2,O3,O4: string;
 // шестнадцатиричные части
 H1,H2,H3,H4: string;
 // Здесь будут собраны все шестнадцатиричные части
 HexIP: string;
 XN: array[1..8] of Extended;
 Flt1: Extended;
 Xc: Integer;
begin

 // Сохраняем в обратном порядке для простого случая
 Xn[8]:=IntPower(16,0);Xn[7]:=IntPower(16,1); Xn[6]:=IntPower(16,2);Xn[5]:=IntPower(16,3);
 Xn[4]:=IntPower(16,4);Xn[3]:=IntPower(16,5); Xn[2]:=IntPower(16,6);Xn[1]:=IntPower(16,7);

 // Сохраняем оригинальный IP адрес
 OrgVal:=OrgIP;
 O1:=Copy(OrgVal,1,Pos(".",OrgVal)-1);Delete(OrgVal,1,Pos(".",OrgVal));
 O2:=Copy(OrgVal,1,Pos(".",OrgVal)-1);Delete(OrgVal,1,Pos(".",OrgVal));
 O3:=Copy(OrgVal,1,Pos(".",OrgVal)-1);Delete(OrgVal,1,Pos(".",OrgVal));
 O4:=OrgVal;

 H1:=IntToHex(StrToInt(O1),2);H2:=IntToHex(StrToInt(O2),2);
 H3:=IntToHex(StrToInt(O3),2);H4:=IntToHex(StrToInt(O4),2);

 // Получаем шестнадцатиричное значение IP адреса
 HexIP:=H1+H2+H3+H4;

 // Преобразуем это большое шестнадцатиричное значение в переменную Float
 Flt1:=0;

 for Xc:=1 to 8 do
 begin
   case HexIP[Xc] of
     "0".."9": Flt1:=Flt1+(StrToInt(HexIP[XC])*Xn[Xc]);
     "A": Flt1:=Flt1+(10*Xn[Xc]);
     "B": Flt1:=Flt1+(11*Xn[Xc]);
     "C": Flt1:=Flt1+(12*Xn[Xc]);
     "D": Flt1:=Flt1+(13*Xn[Xc]);
     "E": Flt1:=Flt1+(14*Xn[Xc]);
     "F": Flt1:=Flt1+(15*Xn[Xc]);
   end;
 end;
 Result:=FloatToStr(Flt1);
end;


 
Defunct ©   (2004-10-08 20:35) [9]

Вот функции, которые помогут в этом отношении.

   This file is part of the Free Sockets Interface
   Copyright (c) 1999 by Berczi Gabor ( e-mail: sting@freemail.hu )


type
   TIPRec = packed record
     Octets: array[1..4] of byte;
   end;

Function FormatIP(IP: Cardinal): string;
Var S: string[20];
   I: Cardinal;
Begin
 S:="";
 For I:=1 to 4 Do
 Begin
   If I<>1 Then S:=S+".";
   S:=S+Int2String(TIPRec(IP).Octets[I]);
 End;
 FormatIP:=S;
End;

Procedure SplitIP(IP: Cardinal; var B1,B2,B3,B4: byte);
Begin
 With TIPRec(IP) Do
 Begin
   B1:=Octets[1];
   B2:=Octets[2];
   B3:=Octets[3];
   B4:=Octets[4];
 End;
End;

Function IP(B1,B2,B3,B4: byte): Cardinal;
Var L: Cardinal;
Begin
 With TIPRec(L) do
 Begin
   Octets[1]:=B1;
   Octets[2]:=B2;
   Octets[3]:=B3;
   Octets[4]:=B4;
 End;
 IP:=L;
End;

Function IPStr(IP: string): Cardinal;
Var Addr: TIPRec;
   I,P: Cardinal;
Begin
 For I:=1 To 4 Do
 Begin
   P:=Pos(".",IP);
   if P=0 then P:=length(IP)+1;
   Addr.Octets[I]:=String2Int(copy(IP,1,P-1));
   Delete(IP,1,P);
 End;
 IPStr:=Cardinal(Addr);
end;


{
 $Log: abisocks.pas,v $

 Revision 1.0  1999/07/07 09:46:55  gabor
    Original implementation

}



Страницы: 1 вся ветка

Текущий архив: 2004.10.24;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.037 c
1-1097145911
Cosinus
2004-10-07 14:45
2004.10.24
DrawCell в StringGrid. Хм...


4-1095696470
GrEG
2004-09-20 20:07
2004.10.24
Проблема с ReadDirectoryChangesW


3-1096019705
janb
2004-09-24 13:55
2004.10.24
Уважаемые мастера!!! Как в fastreporte создать компоненты?


1-1096972622
NewDelpher
2004-10-05 14:37
2004.10.24
Проблемы с абстрактными методами


8-1090928361
П7
2004-07-27 15:39
2004.10.24
Как заставить Flash перерисовывать себя при отображении