小端格式和大端格式(Little-Endian&Big-Endian)

不同的CPU有不同的字節(jié)序類型,這些字節(jié)序是指整數(shù)在內(nèi)存中保存的順序。

最常見的有兩種:

1. Little-endian:將低序字節(jié)存儲在起始地址(低位編址)

2. Big-endian:將高序字節(jié)存儲在起始地址(高位編址)

LE(little-endian):

最符合人的思維的字節(jié)序

地址低位存儲值的低位

地址高位存儲值的高位

怎么講是最符合人的思維的字節(jié)序,是因?yàn)閺娜说牡谝挥^感來說

低位值小,就應(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é)的填充進(jìn)去

例子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進(jìn)制數(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é)序。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容