小端格式和大端格式
阿新 • • 發佈:2019-02-04
不同的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
Little-Endian優點:提取一個,兩個,四個或者更長位元組資料的彙編指令以與其他所有格式相同的方式進行:首先在偏移地址為0的地方提取最低位的位元組,因為地址偏移和位元組數是一對一的關係,多重精度的數學函式就相對地容易寫了。[1]
如果你增加數字的值,你可能在左邊增加數字(高位非指數函式需要更多的數字)。因此,經常需要增加兩位數字並移動儲存器裡所有Big-endian順序的數字,把所有數向右移,這會增加計算機的工作量。不過,使用Little- 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開始的記憶體中,則結果為
x86系列的CPU都是little-endian的位元組序。
Big-Endian和Little-Endian優缺點
參考:http://www.cnblogs.com/passingcloudss/archive/2011/05/03/2035273.html