1. 程式人生 > >位元組順序:高位優先(big-endian)和低位優先(little-endian)

位元組順序:高位優先(big-endian)和低位優先(little-endian)

@[TOC](位元組順序:高位優先(big-endian)和低位優先(little-endian))

網路位元組序: MSB 高位元組前存法 Most Significant Bit   (Big Edian) 
主機位元組序: LSB 低位元組前存法 Lest Significant Bit  (Little Edian)  

位元組順序是指佔記憶體多於一個位元組型別的資料在記憶體中的存放順序,通常有小端、大端兩種位元組順序。小端位元組序指低位元組資料存放在記憶體低地址處,高位元組資料存放在記憶體高地址處;大端位元組序是高位元組資料存放在低地址處,低位元組資料存放在高地址處。基於X86平臺的PC機是小端位元組序的(原文參考)。在跨系統處理二進位制資料流時,要注意這個問題。我就是在處理++服務端的BML(Binary Markup Language)二進位制標記資料流時碰到了這個問題。

因為現行的計算機都是以八位一個位元組為儲存單位,那麼一個16位的整數,也就是C語言中的short,在記憶體中可能有兩種儲存順序big-endian和litte-endian。考慮一個short整數0x3132(0x32是低位,0x31是高位),把它賦值給一個short變數,那麼它在記憶體中的儲存可能有兩種不同的方式。

小端格式和大端格式(Little-Endian&Big-Endian) 不同的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的位元組序。

轉自https://www.cnblogs.com/passingcloudss/archive/2011/05/03/2035273.html