为什么要判断大小端:
因为在计算机中,我们是以字节为单位的,每个地址单元对应着一个字节,一个字节8bit。在编程语言中,除了1字节的char还有几个字节的int, short等数据类型,既然不止一个字节,那么就存在如何将多个字节排序的问题,由此就导致了大小端模式。
大小端区别:
大端字节是指在一个整数的高位字节(23-31 bit)存储在内存的低地址处,低位字节(0-7 bit)存在内存的高地址处。小端则正好相反。
例如一个16bit的short型x,在内存中的地址为0x0010,x的值为0x1122,那么0x11为高字节,0x22为低字节。对于大端模式,就将0x11放在低地址中,即0x0010中,0x22放在高地址中,即0x0011中。小端模式,刚好相反。
如何用程序判断主机是大端还是小端:
//结合以上给出的例子
//联合体union的存放顺序是所有成员都从低地址开始存放,利用该特性可以轻松地获得了CPU对内存采用Little-endian还是Big-endian模式读写:
void byteorder()
{
union
{
short value;
char union_bytes[sizeof(short)];
}test;
test.value = 0x0102;
if ((test.union_bytes[0] == 1) &&(test.union_bytes[1] == 2))
printf("bigedition\n");
else if ((test.union_bytes[0] == 2) &&(test.union_bytes[1] == 1))
printf("smalledition");
else
printf("unknown");
}