大小端问题

来源:互联网 发布:淘宝网婴儿衣服 编辑:程序博客网 时间:2024/06/16 09:50

为什么要判断大小端:

         因为在计算机中,我们是以字节为单位的,每个地址单元对应着一个字节,一个字节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");} 


0 0