網路位元組序

2021-08-26 04:59:54 字數 1777 閱讀 5623

網路位元組序

一.位元組序

位元組序是由於不同的主處理器和作業系統,對大於乙個位元組的變數在記憶體中的存放順序不同而產生的。

位元組序通常有大端位元組序列和小端位元組序兩種分類方法。

由於主機的千差萬別,主機的位元組序不能做到統一,但是網路上傳輸的數值,它們有統一的規定。網路位元組序:是指多位元組變數在網路傳輸時的表示方法,網路位元組序採用高階位元組序的表示方法。

二.大端位元組序和小端位元組序

位元組序是由於cpu和os對多位元組變數的記憶體儲存順序不同而產生的。

1.briefintroduce:

乙個16位的整數,它由兩個位元組構成,在有的系統上會將高位元組放在記憶體的低位址上,而有的系統上則將高位元組放在記憶體的高位址上,所以存在位元組序的問題。

2.位元組序的表示方法有兩種:

1>小端位元組序(little endian):在表示變數的記憶體起始位址存放底位元組,高位元組順序存放

2>大端位元組序(big endian):在表示變數的記憶體起始位址存放高位元組,底位元組順序存放。

3例項:

乙個變數的值為0xabcd,在大端位元組序和小端位元組序的系統中兩者的存放順序是不同的.

1>在小端位元組系統中的存放順序如圖:

0xab在位址15~8的位址上,而0xcd在位址7~0的位置上。

2>在大端位元組序系統中的存放順序如圖:

4.程式例項:

可以編寫程式來檢測下變數在記憶體中的表示形式,以確定系統中的位元組序為大端位元組序還是小端位元組序。

(1)位元組序結構:

程式先建立乙個公用體型別address,用於測試位元組序,成員value是int 型別變數,可以通過成員byte來訪問value變數的高位元組和低位元組。

typedef unionaddr;

(2)變數宣告,宣告乙個to型別的變數typeordr,給變數value賦值為0xabcd,由於在型別addr中,value和byte成員共享同一塊記憶體,所以可以通過byte的不同成員來訪問value的高位元組和低位元組。

(3)程式:

int main(int argc,char *argv)

/*大端位元組序判斷*/

if(typeorder.byte[0] == 0xab &&typeorder.byte[1]==0xcd)

return 0; }

5.進行網路位元組序轉換的函式有htons,htonl,ntohs(),ntohl()等,其中s表示short資料型別,l是long資料型別的意思,h是host既主機的意思,n是network即網路的意思。

1>htons(host to net short):表示對short型別的變數,從主機位元組序轉換為網路位元組序。

2>ntohs(net to host short):表示對short型別的變數,從網路位元組序轉換為主機位元組序。

3>htonl(host to net long):表示對long型別的變數,從主機位元組序轉換為網路位元組序

4>ntohl(net to host long):表示對long型別的變數,從網路位元組序轉換為主機位元組序。

6.由於在網路中網路位元組序採用高階位元組序的表示方法。因此位元組序轉換函式在不同平台上的實現是不同的,在小端主機位元組序的平台要進行轉換,而在大端主機位元組序的平台上是不需要進行轉換的。

例如:通過下面的實現方式可以相容不同的平台:

#if isle

/*小端位元組序平台呼叫此部分***/

long htonl(longvalue)

#else if isbe

/*大端位元組序平台呼叫此部分***/

long htonl(longvalue)

#endif

位元組序和網路位元組序

1 位元組序 由於不同的計算機系統採用不同的位元組序儲存資料,同樣乙個4位元組的32位整數,在記憶體中儲存的方式就不同.位元組序分為小尾位元組序 little endian 和大尾位元組序 big endian intel處理器大多數使用小尾位元組序,motorola處理器大多數使用大尾 big e...

位元組序和網路位元組序

1位元組序 由於不同的計算機系統採用不同的位元組序儲存資料,同樣乙個4位元組的32位整數,在記憶體中儲存的方式就不同.位元組序分為小尾位元組序 little endian 和大尾位元組序 big endian intel處理器大多數使用小尾位元組序,motorola處理器大多數使用大尾 big en...

位元組序與網路位元組序

cpu向記憶體儲存資料的方式有2種,這意味著cpu解析資料的方式也分為2種 0x20號 0x21號 0x22號 0x23號 0x12 0x32 0x56 0x78 整數0x12345678,0x12是最高位位元組,0x78是最低位位元組。因此大端中先儲存最高位位元組0x12,小端序儲存方式如下 0x...