通讯中的字节网络顺序和字节主机顺序
写网络程序的时候,往往会遇到字节的网络顺序和主机顺序的问题。
其实数据的顺序是由cpu决定的,与操作系统无关。
如 Intel x86结构下,short型数0x1234表示为34 12,int型数0x12345678表示为78 56 34 12
如IBM power PC结构下,short型数0x1234表示为12 34,int型数0x12345678表示为12 34 56 78
由于这个原因不同的机器之间无法通信,所以要转换成一种约定的数序,也就是网络字节顺序,其实就是如同power pc那样的顺序 。
下面是两个进行转换的接口:
//主机顺序转换成网络顺序或网络顺序转换成主机顺序
inline unsigned long HTONL(unsigned long h)
{
return (h>>24)+((h>>16)<<8)+((h>>8)<<16)+(h<<24);
}
//主机顺序转换成网络顺序或网络顺序转换成主机顺序
inline unsigned short HTONS(unsigned short h)
{
return (h>>8)+(h<<8);
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/sergeycao/archive/2009/02/24/3933149.aspx