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方式.

posted @ 2011-07-01 21:34  lostyue  阅读(213)  评论(0编辑  收藏  举报