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 ...