X86体系用小端字节序,即
低内存地址空间存储数据的低位。
用一个例子说明:
#include
int pt(const unsigned char *var ,int l,
char token)
{
int i=0;
const unsigned char *p
=var;
printf("LOW <- ");
char s[20];
if (token == 'd')
sprintf(s,"[%%03%c] ",token);
else if (token == 'x') sprintf(s,"[%%02%c]
",token);
else if (token == 'o') sprintf(s,"[%%04%c]
",token);
else return -1;
for (i=0; iHIGH\n");
return
1;
}
int main (int argc, char *argv[])
{
int a
=65536;
short int b =256;
pt((unsigned char *)&a, 4,
'd');
pt((unsigned char *)&b, 2, 'd');
return
0;
}
得到的结果是:
LOW HIGH
LOW HIGH
--------------如果把a 和 b的值都改成 1, 得到的结果是:
LOW HIGH
LOW HIGH
可见,X86用
低地址空间存储数据的低位的。
这与Motorola的CPU是相反的。
现在网络上传输的数据的标准顺序为大端字节序。所以,X86就要进行转换。
转换非常简单:
#include
/* 用到的头文件 */
unsigned long htonl ( unsigned long
hostlong ); /* 主机转网络 */
unsigned short htons ( unsigned short hostshort
); /* 主机转网络 */
unsigned long ntohl ( unsigned long netlong ); /* 网络转主机
*/
unsigned short ntohs ( unsigned short netshort ); /*网络转主机 */
阅读(3870) | 评论(0) | 转发(0) |