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

解决方案 »

  1.   

    哦,原来是获取IP地址的高位值;Delphi版这么冷清,没一个人回答!
    那问一个其它的:
      delphi中的ip_int : integer;    ip_int := inet_addr(pchar(ip));当ip_int 超过high(integer)时会自动截取等到负数,而C#中如果超出了就会无法转换,用long存储的话又不是我想要的那个值;试问:C# 中怎么忙转换成Delphi中的结果?高人指点!
      

  2.   

    比如
        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);
      

  3.   

    32位int,delphi有 integer和dword 分别对应 有/无符号整数
      

  4.   

    procedure TForm1.Button1Click(Sender: TObject);
    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,是不是這個數?
      

  5.   

    IP=‘172.016.087.164’时为2757169324,而int.MaxValue=2147483647,超出了int最大值,delphi会进行移位处理得到-1537797972,可是C#不知道怎么达到自动处理
      

  6.   


    IPAddress ipad = IPAddress.Parse("172.16.87.164");
                        ip = Convert.ToInt32((int)ipad.Address);前面强制转换就可以了