htons
htons
htons是將整型變數從主機位元組順序轉變成網路位元組順序,就是整數在地址空間存儲方式變為高位位元組存放在內存的低地址處。
網路位元組順序是TCP/IP中規定好的一種數據表示格式,它與具體的CPU類型、操作系統等無關,從而可以保證數據在不同主機之間傳輸時能夠被正確解釋,網路位元組順序採用big-endian排序方式。
在Windows和Linux網路編程時需要用到的,用來將主機位元組順序轉化為網路位元組順序,以Windows下的代碼為例:
htons的功能:將一個無符號短整型的主機數值轉換為網路位元組順序,即大尾順序(big-endian)
參數u_short hostshort:16位無符號整數
返回值:TCP/IP網路位元組順序.
不同的CPU有不同的位元組順序類型,這些位元組順序類型指的是整數在內存中保存的順序,即主機位元組順序。常見的有兩種:
序號 | 英文名 | 中文名 | 描述 |
1 | big-endian | 大尾順序 | 地址的低位存儲值的高位 |
2 | little-endian | 小尾順序 | 地址的低位存儲值的低位 |
而我們常用的 x86 CPU (intel, AMD) 電腦是 little-endian,也就是整數的低位位元組放在內存的低位元組處。舉個例子吧。假定你的數據是0x1234,
在網路位元組順序里 這個數據放到內存中就應該顯示成
addr addr+1
0x12 0x34
而在x86電腦上,數據0x1234放到內存中實際是:
addr addr+1
0x34 0x12
htons 的用處就是把實際主機內存中的整數存放方式調整成網路位元組順序。
我們在Intel機器下,執行以下程序
運行的結果如下圖
htons
不同CPU上運行不同的操作系統,其主機位元組順序也是不同,參見下表:
處理器 | 操作系統 | 位元組順序 |
Alpha | 全部 | little-endian |
HP-PA | NT | little-endian |
HP-PA | UNIX | big-endian |
Intelx86 | 全部 | little-endian |
MIPS | NT | little-endian |
MIPS | UNIX | big-endian |
PowerPC | NT | little-endian |
PowerPC | 非NT | big-endian |