网络编程中经常用到的网络字节序和主机字节序的转换,比如IP 字符串(暂时只讨论IPV4),是以三个点号和四个数字组成,并以点号相分隔的字符串。比如说,IP是225.224.223.222,那么整数是不是就是 0XFFFEFDFC呢?答案是不一定。虽然此IP地址在内存中的存储顺序从左至右依次是,”FF”,“FE”, “FD”, “FC”两个字节。但是这个存储顺序代表的实际数值是何值,得看CPU体系架构,是 little-endian 还是 big-endian.如果是前者,就表示高位存在右边。后者,高位存在左边,所以,整数 0XFFFEFDFC 的存储情况如下:
0xFF 0xFE 0xFD 0xFC # big-endian
0xFC 0xFD 0xFE 0xFF # little-endian
一般 Intel 的 CPU 是 little-endian, 所以IP 225.224.223.222 所对应的整数应该是:0XFCFDFEFF。0XFFFEFDFC 对应的IP则是:222.223.224.225。
转化的方法如下,输入是点分的IP地址格式(如A.B.C.D)的字符串,从该字符串中提取出每一部分,转换为ULONG,假设得到4个ULONG型的A,B,C,D,
ulAddress(ULONG型)是转换后的结果,
ulAddress = D<<24 + C<<16 + B<<8 + A(网络字节序),即inet_addr(const char *)的返回结果
另外,我们也可以得到把该IP转换为主机序的结果,转换方法一样
A<<24 + B<<16 + C<<8 + D