1. 程式人生 > >小端格式和大端格式

小端格式和大端格式

不同的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的位元組序。

Big-Endian和Little-Endian優缺點

Big-Endian優點:靠首先提取高位位元組,你總是可以由看看在偏移位置為0的位元組來確定這個數字是正數還是負數。你不必知道這個數值有多長,或者你也不必過一些位元組來看這個數值是否含有符號位。這個數值是以它們被打印出來的順序存放的,所以從二進位制到十進位制的函式特別有效。因而,對於不同要求的機器,在設計存取方式時就會不同。[1]
Little-Endian優點:提取一個,兩個,四個或者更長位元組資料的彙編指令以與其他所有格式相同的方式進行:首先在偏移地址為0的地方提取最低位的位元組,因為地址偏移和位元組數是一對一的關係,多重精度的數學函式就相對地容易寫了。[1] 如果你增加數字的值,你可能在左邊增加數字(高位非指數函式需要更多的數字)。因此,經常需要增加兩位數字並移動儲存器裡所有Big-endian順序的數字,把所有數向右移,這會增加計算機的工作量。不過,使用Little- Endian的儲存器中不重要的位元組可以存在它原來的位置,新的數可以存在它的右邊的高位地址裡。這就意味著計算機中的某些計算可以變得更加簡單和快速。[

參考:http://www.cnblogs.com/passingcloudss/archive/2011/05/03/2035273.html