概念:
在幾乎所有的機器上,多位元組物件都被儲存為連續的位元組序列。
例如在c語言中,乙個型別為int的變數x位址為0x100,那麼其對應位址表示式&x的值為0x100。
且x的四個位元組將被儲存在儲存器的0x100, 0x101, 0x102, 0x103位置。
大端位元組序:在記憶體中,低位址存放資料的高位,高位址存放資料的低位
小端位元組序:在記憶體中,低位址存放資料的低位,高位址存放資料的高位
例如假設上述變數x型別為int,位於位址0x100處,它的十六進製制為0x01234567,位址範圍為0x100~0x103位元組,其內部排列順序依賴於機器的型別。
大端法從首位開始是:0x100: 01, 0x101: 23, 0x102: 45, 0x103: 67
小端法從首位開始是:0x100: 67, 0x101: 45, 0x102: 23, 0x103: 01
------------------------大端小端測試
#include int main(void)
return 0;
}
-------------------------執行結果可以看出我的測試機是小端:
0x78 ----->0x7fff9a2bbb68
0x56 ----->0x7fff9a2bbb69
0x34 ----->0x7fff9a2bbb6a
0x12 ----->0x7fff9a2bbb6b
再來考慮這個問題:
網路上的資料流是位元組流,比如乙個int整數,在進行網路傳輸的時候,當接收端收到第乙個位元組的時候,它是將這個位元組作為高位還是低位來處理呢?
在網路應用中,位元組序是乙個必須被考慮的因素,因為不同機器型別可能採用不同標準的位元組序,所以均按照網路標準轉化,
網路傳輸一般採用大端序,也被稱之為網路位元組序,或網路序,ip協議中定義大端序為網路位元組序。
伯克利socket api定義了一組轉換函式,用於16和32bit整數在網路序和本機位元組序之間的轉換。htonl,htons用於本機序轉換到網路序;ntohl,ntohs用於網路序轉換到本機序。
在主機本身就使用大端位元組序時,這些函式通常被定義為空巨集。
參考維基百科:
大小端 網路位元組序 本地位元組序問題
總結 1 80x86使用小端法 即本地位元組序 網路位元組序使用大端法。2 二進位制的網路程式設計中,傳送資料,最好以unsigned char,unsigned short,unsigned int 來處理,unsigned short unsigned short 以網路位元組序處理後再拷貝到傳...
位元組序和大小端
大多數處理器中記憶體是可以以位元組為單位進行定址的,當資料型別 int,long 大於1個位元組時,其所占用就的位元組在記憶體中的順序存在兩種模式,分別是小端模式 little endian 和大端模式 big endian 小端模式低位位元組存放在低位址,大端模式高位位元組存放在低位址。大端模式的...
大小端以及主位元組序和網路位元組序問題
大小端問題與主位元組序及網路位元組序 一般在x86和arm下為小端模式 1 2 例如 0x0000 0x12 0x0001 0x34 0x0002 0xab 0x0003 0xcd 大端模式讀取為 1234abcd 小端模式讀取資料為 cdab3412.而網路位元組序這是tcp ip協議中定義好的一...