大小端的問題 什麼是大小端和如何實現大小端)

2021-09-27 11:40:54 字數 1121 閱讀 8651

1.什麼是大小端?

<1>大端(big-endian):資料的高位元組存放在記憶體的低位址中,而資料的低位元組存放在記憶體的高位元組中。(高低大)

<2>小端(little-endian):資料的高位元組存放在記憶體的高位址中,而資料的低位元組存放在記憶體的低位元組中。(高高小)

下面以unsigned int value = 0x19345768為例,分別看看在兩種位元組序下其儲存情況,我們可以用unsigned char buf[4]來表示value

big-endian: 低位址存放高位,如下:

高位址---------------

buf[3] (0x68) – 低位

buf[2] (0x57)

buf[1] (0x34)

buf[0] (0x19) – 高位

---------------

低位址little-endian: 低位址存放低位,如下:

高位址---------------

buf[3] (0x19) – 高位

buf[2] (0x34)

buf[1] (0x57)

buf[0] (0x68) – 低位

--------------

低位址2.如何判斷系統大小端?

(1) 強轉指標實現

#include #include int main()

else

system("pause");

}

#include #include int checksystem()

un; un.a = 1;

return(un.ch == 1);

}int main()

else

system("pause");

}

(3) 使用union和巨集定義

#include #include static union

endian = };

#define endian ((char)endian.un)

int main()

什麼是大小端

有些計算機先從低位位元組開始存放,有些則先從高位位元組開始存放,它們分別稱為 小端 little endian 和 大端 big endian 該問題不僅關係到通訊系統,還關係到可移植性。如果一台計算機可以寫資料,而另一台計算機需要讀這些資料,我們就得先知道第二台主機如何理解第一台寫的資料。注意,只...

大小端問題

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

大小端問題

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