关于字节顺序问题,牵涉到两大CPU派系。那就是Motorola的PowerPC系列CPU和Intel的x86系列CPU。PowerPC系列采用big endian(大端存储)方式存储数据,而x86系列则采用little endian(小端存储)方式存储数据。
所有网络协议都是采用big endian的方式来传输数据的。所以有时我们也会把big endian方式称之为网络字节序。当两台采用不同字节序的主机通信时,在发送数据之前都必须经过字节序的转换成为网络字节序后再进行传输。
Big
Little Endian
我们可以通过以下代码验证自己的机子采用的是大端法还是小端法:
#include<stdio.h>
bool is_little_endian() //当返回1时,表示你的机子采用的是小端法存储,反之则为大端法。
{
{
union w
{
int a;
char b;
}c;
c.a = 1;
return (c.b == 1);
}
}
main()
{
bool x;
x=is_little_endian();
printf("%d\n",x);
}
上述is_little_endian() 函数中,共用体union用的很精妙,利用其成员a和b共用同一段内存,并且int型和char型数据占用内存空间的大小差异,巧妙地截取int型数据的低地址字节数据来判断。