大小端問題

2021-08-07 19:36:15 字數 917 閱讀 7401

因為某些變數占用多個位元組,乙個位元組對應乙個位址,導致位元組存放順序的問題,產生了大小端的問題。

大端模式就是變數的高位元組儲存在低位址。

小端模式就是變數的高位元組儲存在高位址。

假如乙個int a = 0x1234;占用2位元組,位址預設遞增生長。

記憶體位址

大端a儲存方式

小端a儲存形式

0x40000

1234

0x40001

3412

知道上面原理後檢測相當簡單了

//本例子含有一些c語言指標的用法,理解透了,應該可以學點東西。

int main(void)

0x7ffe72c35f8c = 34

0x7ffe72c35f8d = 12

按 來關閉視窗…

從這個輸出可以看出,ubuntu上面測試,我的主機是小段模式。

因為主機是64位的,所以ubuntu上面預設8位元組儲存指標數值。

int main(void)

c;//聯合體公用一片儲存區域,根據最大的型別分配區域,a兩位元組,那麼b就佔a中的一位元組。這種使用方式在暫存器某些位上面用的比較多,也就是所謂的位帶操作。

c.a = 1;//聯合體的低位址存b

printf("%d\n" , c.b);//聯合體的低位址存b

exit(0);

}

1

按 來關閉視窗…

因此也是小端儲存方式。

最後根據慕課上面一張搞定大小端:

大小端問題

對於位數大於 8位的處理器,例如 16位或者 32位的處理器,由於暫存器寬度大於乙個位元組,那麼必然存在著乙個如果將多個位元組安排的問題。因此就導致了大端儲存模式和小端儲存模式。例如乙個 16bit 的short型x 在記憶體中的位址為 0x0010,x 的值為0x1122 那麼0x11 為高位元組...

大小端問題

大小端問題 跨位元組位域大小端轉換例項講解 注 結構體整體當做u16 u32來賦值時才會產生這種問題,如果是按位元組或者移位方式訪問則沒有問題 typedef struct s bit sample 測試程式 vos void bigendiandomainfiledtest vos void 1 ...

大小端問題

大小端問題 最近工作中,有兩次遇到大小端問題,所以花時間寫這篇日誌,總結一下。1.實際需求 1 前段時間寫了乙個修復損壞的gzip檔案的tool,在linux server上編譯執行沒有問題。但是在solaris server上運編譯執行,結果總是和預期的不一致,跟蹤發現是由大小端問題導致的 2 最...