转自: 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方式.