不同的CPU有不同的字節(jié)序類型播掷,這些字節(jié)序是指整數(shù)在內(nèi)存中保存的順序砾赔。
最常見的有兩種:
1. Little-endian:將低序字節(jié)存儲在起始地址(低位編址)
2. Big-endian:將高序字節(jié)存儲在起始地址(高位編址)
LE(little-endian):
最符合人的思維的字節(jié)序
地址低位存儲值的低位
地址高位存儲值的高位
怎么講是最符合人的思維的字節(jié)序,是因為從人的第一觀感來說
低位值小,就應(yīng)該放在內(nèi)存地址小的地方,也即內(nèi)存地址低位
反之,高位值就應(yīng)該放在內(nèi)存地址大的地方卦洽,也即內(nèi)存地址高位
BE(big-endian):
最直觀的字節(jié)序
地址低位存儲值的高位
地址高位存儲值的低位
為什么說直觀,不要考慮對應(yīng)關(guān)系
只需要把內(nèi)存地址從左到右按照由低到高的順序?qū)懗?/p>
把值按照通常的高位到低位的順序?qū)懗?/p>
兩者對照斜棚,一個字節(jié)一個字節(jié)的填充進去
例子1:在內(nèi)存中雙字0x01020304(DWORD)的存儲方式阀蒂。
內(nèi)存地址4000 4001 4002 4003
? ? ? ? ? LE? ?04? ? ?03? ? ?02? ? 01
? ? ? ? ? BE? ?01? ? ?02? ? ?03? ? 04
注:每個地址存1個字節(jié),每個字有4個字節(jié)弟蚀。2位16進制數(shù)是1個字節(jié)(0xFF=11111111)脂新。
例子2:如果我們將0x1234abcd寫入到以0x0000開始的內(nèi)存中,則結(jié)果為
? ? ? ? ? ? ?big-endian? ? ?little-endian
0x0000? ? ? ?0x12? ? ? ? ? ? ? 0xcd
0x0001? ? ? ?0x23? ? ? ? ? ? ? 0xab
0x0002? ? ? ?0xab? ? ? ? ? ? ? 0x34
0x0003? ? ? ?0xcd? ? ? ? ? ? ? 0x12
x86系列的CPU都是little-endian的字節(jié)序粗梭。