简单来讲,小端就是看起来不顺眼的那个。spa
0x12345678,存储时也这么存储 12 34 56 78,看起来顺眼,是大端。指针
0x12345678,存储时这样存储 78 56 34 12,看起来不顺眼,是小端。orm
切记:小端看起来不顺眼。blog
判断大小端方法:it
1.char 指针读取int数据一个Byte方法:io
int IsBigEndian() { int i = 0x12345678; unsigned char *p = (unsigned char*)(&i); if(*p == (char)0x12) return 1;//12 34 56 78这么存储的,就是大端 return 0; }
2.利用union的性质,union老是从0地址偏移,联合体union的存放顺序是全部成员都从低地址开始存放。class
typedef union _un { char ch; int i; } myunion; int IsLittleEndian() { myunion un; un.i = 1;//对i赋值,若是是小端 01 00 00 00,若是是大端 00 00 00 01 if(un.ch == 1) return 1;//小端 return 0; }
//注意:最好是先给int赋值,而后判断char的值,在给int赋值后可以保证其余3个字节为0
int IsLittleEndian1()
{
myunion un;
//un.i = 0;//清零
un.ch = 1;//对ch赋值,低地址字节必定是01,即:01 XX XX XX 除非初始化为0,那么为 01 00 00 00
if(un.i == 1) return 1;//小端 按照小端读出来是1
return 0;
}
大小端总结完毕,记住一点:小端就是看起来不顺眼的那个,这仍是公司的某大哥教给个人,我平时老是记不住大小端,今后就记住了。nio