type
  TIPAddress = array[0..3] of byte; //[0] 192 [1] 168 [2] 0  [3] 50
 
function IptoDWord(ip: TIPAddress): DWord;
begin
  result := ip[0] shl 24 + ip[1] shl 16 + ip[2] shl 8 + ip[3];
end;阅读一个协议接口代码,有一个函数不知道啥意思,问了问写代码的人,它就发了这个代码,有朋友帮忙转成C吗?
谢谢!

解决方案 »

  1.   

    这个写法真多余
    为了增加可移植性,避免受cpu的endian的影响,按照winsock的约定,应该使用 htonl(host to net long)和 ntohl(net to host long)这两个api对 DWORD 字节序进行本地和网络间的转换
    想了解endian的话可以搜索 little-endian 和 big-endian,在x86 cpu都是little-endian的
      

  2.   

    1楼和我想法一样,我当初看到这个函数调用的时候(当时没看到这段源码),也是猜想是网络字节序的问题,可是我用htonl和inet_addr等函数试了一下,结果都不能成功.不知道用这个函数可不可以.
      

  3.   

    unsigned int IpToDword(char *ip) 

      return (ip[0] < < 24) + (ip[1] < < 16) + (ip[2] < < 8) + ip[3]; 
    } int main(void) 

      char ip[4] = { 192, 168, 1, 2 }; 
      unsigned int n;   n = IpToDword(ip);   //...... 
    }
      

  4.   

    谢谢两位,结贴.周一试下,有问题再问.
    PS:xiaocha难得又跑到这帮我引一下,那我再边再给点分吧.