-
htons
鎖定
- 外文名
- htons
- 應 用
- Windows和Linux網絡編程
- 用 途
- 將主機字節順序轉為網絡字節順序
- big-endian
- 地址的低位存儲值的高位
htons概述
#include<winsock2.h> u_short htons(u_short hostshort);
參數u_short hostshort:16位無符號整數
不同的CPU有不同的字節順序類型,這些字節順序類型指的是整數在內存中保存的順序,即主機字節順序。常見的有兩種:
序號 | 英文名 | 中文名 | 描述 |
1 | big-endian | 大尾順序 | 地址的低位存儲值的高位 |
2 | little-endian | 小尾順序 | 地址的低位存儲值的低位 |
htons示例
例1
在網絡字節順序裏 這個數據放到內存中就應該顯示成
addr addr+1
0x12 0x34
而在x86電腦上,數據0x1234放到內存中實際是:
addr addr+1
0x34 0x12
htons 的用處就是把實際主機內存中的整數存放方式調整成網絡字節順序。
例2 C++代碼示例
#include <winsock2.h> #include <iostream> #pragma comment(lib,"ws2_32.lib") using namespace std; int main(){ int a = 16, b; b = htons(a); cout << "a=" << a << endl; cout << "b=" << b << endl; return 0; }
運行的結果如圖1
解釋一下,數字16的16進制表示為0x0010,數字4096的16進製表示為0x1000。 由於Intel機器是小尾端,存儲數字16時實際順序為1000,存儲4096時實際順序為0010。因此在發送網絡包時為了報文中數據為0010,需要經過htons進行字節轉換。如果用IBM等大尾機器,則沒有這種字節順序轉換,但為了程序的可移植性,也最好用這個函數。
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 |