大端機和小端機
不同的CPU有不同的字節序類型,這些字節序是指整數在內存中保存的順序。
最常見的有兩種:
1. Little-endian:將低序字節存儲在起始地址(低位編址)
2. Big-endian:將高序字節存儲在起始地址(高位編址)
小端機 LE(little-endian):
最符合人的思維的字節序
地址低位存儲值的低位,地址高位存儲值的高位
怎么講是最符合人的思維的字節序,是因為從人的第一觀感來說,低位值小,就應該放在內存地址小的地方,也即內存地址低位;反之,高位值就應該放在內存地址大的地方,也即內存地址高位
大端機 BE(big-endian):
最直觀的字節序
地址低位存儲值的高位,地址高位存儲值的低位
為什么說直觀,不要考慮對應關系,只需要把內存地址從左到右按照由低到高的順序寫出,把值按照通常的高位到低位的順序寫出,兩者對照,一個字節一個字節的填充進去
實例
例子1:在內存中雙字0x01020304(DWORD)的存儲方式。
內存地址 4000 4001 4002 4003
LE 04 03 02 01
BE 01 02 03 04
注:每個地址存1個字節,每個字有4個字節。2位16進制數是1個字節(0xFF=11111111)。
例子2:如果我們將0x1234abcd寫入到以0x0000開始的內存中,則結果為
big-endian little-endian
0x0000 0x12 0xcd
0x0001 0x23 0xab
0x0002 0xab 0x34
0x0003 0xcd 0x12
x86系列的CPU都是little-endian的字節序。