有做过这个的吗?进来看看:(50分)

  • 主题发起人 主题发起人 devecom
  • 开始时间 开始时间
D

devecom

Unregistered / Unconfirmed
GUEST, unregistred user!
IP: 207.46.239.122
207 * 16777216 = 3472883712
46 * 65536 = 3014656
239 * 256 = 61184
122 * 1 = 122
------------------------------------------------ +
= 3475959674


我想反算ip???怎么算呢》
我的想法:先对16777216求模,在对65536求。。
是吗?
 
实验了一下,应该是的,至少对你给的IP成立
procedure TForm1.Button1Click(Sender: TObject);
var
Iptotal: Int64;
IP1, IP2, IP3, IP4: string;
begin
Iptotal := 3475959674;
IP1 := IntToStr(Iptotal div 16777216);
IP2 := IntToStr((3475959674 mod 16777216) div 65536);
IP3 := IntToStr(((3475959674 mod 16777216) mod 65536) div 256);
IP4 := IntToStr(((3475959674 mod 16777216) mod 65536) mod 256);
ShowMessage(Format('%S.%S.%S.%S', [IP1, IP2, IP3, IP4]));
end;
 
谢谢,等待是否有更好的方法:)
 
这么简单:

//***************************************************************
// 说明:
// 将32位整数IP地址以字符串表示
// 参数:
// ip : 无符号32位整数IP地址
// 返回:
// 表示IP地址的字符串
//****************************************************************
function IPAddress(ip:Cardinal):String;
begin
Result := Format('%u.%u.%u.%u',[ip and $000000FF,
ip and $0000FF00 shr 8,
ip and $00FF0000 shr 16,
ip and $FF000000 shr 24]);
end;

//***************************************************************
// 说明:
// 将IP地址字符串以32位整数表示
// 参数:
// ip : IP地址字符串
// 返回:
// 表示IP地址的无符号32位整数
//****************************************************************
function IPAddress( ip:String):Cardinal;
var
p : array[0..3] of Cardinal;
begin
p[0] := 1;
while p[0] <= Length(ip) do
begin
if ip[p[0]] in ['.'] then ip[p[0]]:= ',';
Inc(p[0]);
end;
p[0] := StrToIntDef(ExtractData(ip,0),0);
p[1] := StrToIntDef(ExtractData(ip,1),0);
p[2] := StrToIntDef(ExtractData(ip,2),0);
p[3] := StrToIntDef(ExtractData(ip,3),0);
result := (p[3] shl 24) + (p[2] shl 16) + (p[1] shl 8) + p[0];
end;
 
谢谢各位了!!

感激不尽~~~
 
后退
顶部