ipAddress := StringReplace('172,016,087,003', '.', ',', [rfReplaceAll]); slList := TStringlist.Create;
slList.CommaText := ipAddress; fillchar(arr, sizeof(arr), 0); pbyte(@arr[0])^ := strtoint(slList.strings[2]);
pbyte(@arr[1])^ := strtoint(slList.strings[3]);
word_ip := pword(@arr[0])^; //855 ????能告诉我这部分代码主要是想要什么结果,最后那句为什么是855?Delphi
那问一个其它的:
delphi中的ip_int : integer; ip_int := inet_addr(pchar(ip));当ip_int 超过high(integer)时会自动截取等到负数,而C#中如果超出了就会无法转换,用long存储的话又不是我想要的那个值;试问:C# 中怎么忙转换成Delphi中的结果?高人指点!
delphi中:inet_addr(pchar('172.16.87.164'))得到-1537797972
而我用Delphi转换时用int无法接收,用long接收得到:2757169324,不是我想要的值;
C#具体转换方法IPAddress ipad = IPAddress.Parse("172.16.87.164");
ip = Convert.ToInt32(ipad.Address);
var
MyIPString :TStringList;
intIP :Longword;
i :integer;
begin
MyIPString := TStringList.Create;
intIP := 0;
try
MyIPString.DelimitedText :=StringReplace('172,16,87,164', '.', ',', [rfReplaceAll]);
for i := 0 to MyIPString.Count-1 do
begin
intIP := intIP+StrToInt(MyIPString.Strings[i]) shl ((3-i)*8);
end;
finally
FreeAndNil(MyIPString);
end;
showmessage(IntToStr(intIP));
end;
結果:2886752164,是不是這個數?
IPAddress ipad = IPAddress.Parse("172.16.87.164");
ip = Convert.ToInt32((int)ipad.Address);前面强制转换就可以了