一、機器字節序
1、int a = 1;
低位址 高位址
0x100 0x101 0x102 0x103
對於 int 型的整數1,對應的二進位制數為:
0000 0000 0000 0000 0000 0000 0000 0001
高位元組 低位元組
2、我們定義乙個整形變數a,假設其初始位址為0x100,結束位址為0x103,那麼0x100對應
低位址,0x103對應高位址。而對於二進位制資料,最前面為高位元組,最後面為低位元組,但
低位址存放高位元組還是低位元組呢?各個機器可能不同。
3、低位址存放高位元組為大端;低位址存放地位元組為小端;
二、那麼該如何判斷機器的位元組序呢?
我們可以使用聯合體,因為聯合體的成員共用一段記憶體。
**如下:
三、那麼如何實現大小端的轉換呢?#include union test
;
int main()
else if (t.array[0] == 1 && t.array[1] == 2)
else
return 0;
}
1、使用位運算 2、移位
那麼該如何移位呢?
定義乙個unsigned int a;
假設a的二進位制位:1011 1100 0001 1100 1110 0011 0011 0001
a & 0x0000 00ff << 24 0011 0001 0000 0000 0000 0000 0000 0000
a & 0x0000 ff00 << 8 0000 0000 1110 0011 0000 0000 0000 0000
a & 0x00ff 0000 >>8 0000 0000 0000 0000 0001 1100 0000 0000
a & 0xff00 0000 >>24 0000 0000 0000 0000 0000 0000 1011 1100
**例項:
#include int mian()
大小端位元組序的判斷
最近要重新研究linux網路程式設計,首先都遇到這個問題,記錄複習下吧 本文 大小端位元組序小端位元組序 little endian,將低位元組存放在記憶體的起始位址 大端位元組序 big endian,將高位元組存放在記憶體的起始位址。例如,數字index 0x11223344,在大小端位元組序方...
大小端位元組序的判斷
大小端位元組序是由於cpu和os對大於乙個位元組的變數各個位元組在記憶體中的儲存順序不同而產生的。以佔兩個位元組的十六進製制數0xabcd為例,小端位元組序 15 8 7 0 a bc d 15 8 7 0 c da b typedef unionto int main 網路位元組序統一為大端,主機...
怎麼判斷大小端(網路位元組序和主機位元組序)
怎麼判斷大小端 網路位元組序和主機位元組序 使用union進行判斷,這裡說一下能用union判斷的理由,union所佔的位元組數是union中成員的最大位元組數,也就是說成員們共用同一塊位址。include void byteorder test test.data 0x0102 if test.v...