高位元組低位元組大小端模式

2021-07-23 14:33:15 字數 1265 閱讀 6189

位元組順序是指佔記憶體多於乙個位元組型別的資料在記憶體中的存放順序,通常有小端、大端兩種位元組順序。

小端位元組序指低位元組資料存放在記憶體低位址處,高位元組資料存放在記憶體高位址處;

大端位元組序是高位元組資料存放在低位址處,低位元組資料存放在高位址處。

高、低位元組

一般pc是低位元組序,如果按平時書寫習慣,從左到右是高位到地位的順序,則例如0x12345678,在記憶體中的情況是

高位址 

12 34 

56 78 

低位址

3. 總結 

整數型別內部:低位址儲存低位,高位址儲存高位。 

區域性變數:先定義的高位址,後定義的低位址。 

類,結構體,陣列:先定義的低位址,後定義的高位址。 

陣列實際占用的空間,要比元素大,感覺上像是給陣列名本身乙個「指標型別」的空間,即4個位元組。

intel處理器  小端模式

tcp/ip       大端模式

1. 下面程式輸出是多少?

union u ; 

int main()

結果為266。對於整數型別,都是低位元組存低位,高位元組存高位,因此低位是10,高位是1,結果=1*256+10=266。

2. 下面不同變數之間位址大小關係

class test ; 

int main()

(size_t)&a > (size_t)&b > (size_t)&c > (size_t)&t.n > (size_t)&t.m = (size_t)t 

2293612   > 2293611  >  2293552  >  2293548     > 2293544      = 2293544 

a、b、c、t都是區域性變數,在棧上儲存,棧是從高位址到低位址,因此位址逐漸減小。結構體內部,先定義的位址小,後定義的位址大,這與類內的成員,陣列總的元素,都是類似的。 

此外,值得注意的是(size_t)&a-(size_t)&b=1,剛好是1個位元組,即b的大小。(size_t)& b-(size_t)&c=59,這是因為首先需要位元組對齊,補3個位元組,從2293611,補到2293608,從2293607到 2293552剩下的44個位元組是陣列占用,注意陣列只有10個元素是40個位元組,還有4個位元組應該是陣列名占用的,把陣列名看作乙個指標?或者是陣列名本身包含陣列長度的資訊,具體情況不是很清楚,不過int a[10]占用的空間是44個位元組,而10個int型別的變數占用40個位元組。t的位元組分配很簡單,沒有什麼了。 

總的來說,具體的位址,需要考慮「棧的高位址到低位址」和「位元組對齊」以及「陣列」這樣的特殊情況等等。

大小端位元組序

1.大端和小端問題 大小端位元組序與硬體有關 intel x86 都是小端位元組序 總結 大端是 按照正常我們書寫的順序來儲存的 小端是 按照我們書寫順序相反的 實現 include int main putchar n printf x n a return 0 檢視輸出結果,判斷大小端位元組序 ...

位元組序 大小端

計算機的基本儲存單元是8位單位元組。多位元組資料,如4位元組的整型資料如何儲存的呢?是高位在記憶體高位元組?還是低位在記憶體高位元組?即位元組是按如何順序存放的?也就是所謂的位元組序,按照存放順序分為大端序 big endian 和小端序 little endian 記憶體位址訪問是由低位址到高位址...

大小端位元組序

計算機硬體有兩種儲存資料的方式 大端位元組序 big endian 和小端位元組序 little endian 比如十六進製制數0x0102,十六進製制每個數字佔4bit,四個數字16bit,也就是2byte,2個位元組儲存。0x0102高位位元組是0x01,低位位元組是0x02。l大端位元組序 高...