little-endian和big-endian

转自: http://doudouclever.blog.163.com/blog/static/17511231020115110828583/

Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。

Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。

 这里举个简单的例子,比如存放0x12345678到这两种的CPU当中,内存地址假定从 0x0000开始,存放顺序如下:

内存地址              big-endian:            little-endian
0x0000                  0x12                 0x78         
0x0001                  0x34                 0x56                          
0x0002                  0x56                 0x34
0x0003                  0x78                 0x12

判断方法: 1-le, 0-be

int LOrB(){

    union {

         unsigned short us;

         unsigned char uc[2];

    }un;

    un.us=0x0001;

    if(un.uc[0]==1)

        return 1;

    else if(un.uc[0]==0)

        return 0;

    else return -1;

}

另一个方式:

int main()

{

        int x=1;

        if (*(char *) &x ==1)

                printf("Little endian!\n");

        else    printf("Big endian!\n");

        return 0;

}

如果是 le, 0x0001 的存放方式就是(从低到高) 0x01 0x00 0x00 0x00

如果是be, 0x0001 的存放方式就是(从低到高) 0x00 0x00 0x00 0x01

利用的Union的特性, uc如果是1,从而表示使用的是 le方式.

你可能感兴趣的:(it)