关于 大小端
簡單來說,小端就是看起來不順眼的那個。
0x12345678,存儲時也這么存儲 12 34 56 78,看起來順眼,是大端。
0x12345678,存儲時這樣存儲 78 56 34 12,看起來不順眼,是小端。
切記:小端看起來不順眼。
?
判斷大小端方法:
1.char 指針讀取int數(shù)據(jù)一個Byte方法:
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的性質(zhì),union總是從0地址偏移,聯(lián)合體union的存放順序是所有成員都從低地址開始存放。
?
typedef union _un {char ch;int i; } myunion;int IsLittleEndian() {myunion un;un.i = 1;//對i賦值,如果是小端 01 00 00 00,如果是大端 00 00 00 01if(un.ch == 1) return 1;//小端return 0; }//注意:最好是先給int賦值,然后判斷char的值,在給int賦值后能夠保證其他3個字節(jié)為0
int IsLittleEndian1()
{
myunion un;
//un.i = 0;//清零
un.ch = 1;//對ch賦值,低地址字節(jié)一定是01,即:01 XX XX XX 除非初始化為0,那么為 01 00 00 00
if(un.i == 1) return 1;//小端 按照小端讀出來是1
return 0;
}
?
?大小端總結(jié)完畢,記住一點:小端就是看起來不順眼的那個,這還是公司的某大哥教給我的,我平時總是記不住大小端,從此就記住了。
?
轉(zhuǎn)載于:https://www.cnblogs.com/wangyuezhuiyi/p/4241700.html
總結(jié)
- 上一篇: [BZOJ2730][HNOI2012]
- 下一篇: ASP.NET DataSet查询结果转