Текущий архив: 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.47 MB
Время: 0.032 c