一、概念
endian:字節存儲順序,端模式。
Little-Endian 和 Big-Endian表示的是計算機字節順序,所謂的字節順序指的是長度跨越多個字節的數據的存放形式(若只有一個字節則不需考慮字節序的問題)。對於整型、長整型等數據類型,Big endian 認爲第一個字節是最高位字節(按照從低地址到高地址的順序存放數據的高位字節到低位字節);而Little endian 則相反,它認爲第一個字節是最低位字節(按照從低地址到高地址的順序存放數據的低位字節到高位字節)。
大部分人在實際的開發中都很少會直接和字節序打交道。唯有在跨平臺以及網絡程序中字節序纔是一個應該被考慮的問題。TCP/IP各層協議將字節序定義爲Big-Endian,因此TCP/IP協議中使用的字節序通常稱之爲網絡字節序。
二、舉例
例如,假設從內存地址0x0000 開始有以下數據:0x12
0x34 0xab 0xcd。
如果我們去讀取一個地址爲0x0000的四個字節變量,若字節序爲big-endian,則讀出結果爲0x1234abcd;若字節序位little-endian,則讀出結果爲 0xcdab3412。
如果我們將0x1234abcd 寫入到以0x0000 開始的內存中,則Little endian 和Big endian 模式的存放結果如下:
地址 0x0000 0x0001 0x0002 0x0003
big-endian 0x12 0x34 0xab 0xcd
little-endian 0xcd 0xab 0x34 0x12
採用Little-Endian的 操作系統: FreeBSD,Linux,Windows x86的機器 ;
採Big-Endian的操作系統:MAC OS, ARM, Alpha,摩托羅拉的PowerPC, Network中的變量 ,Java語言.
三、判斷大小端的方法
實例如下:環境爲32位機
int i=1;
Big-endian方式下: 0x00 0x00 0x00 0x01
Little-endian方式下:0x01 0x00 0x00 0x00
地址: 1000 1001 1002 1003
獲取i的地址,爲1000處 &i
強制轉換指針類型爲char * ,即從地址起點截斷1個字節 (char*)&i
此時
Big-endian方式下爲:0x00
Little-endian方式下爲:0x01
得出如下結論
int i=1;
若*(char*)&i等於1 則爲Little-endian方式,否則爲Big-endian方式。
我在自己筆記本上得出的結果是'\x1',應該是16進制的1吧。