為什么要轉換?
主機字節序:整數在內存中保存的順序,不同的處理器對應不容的模式
Little endian 將低序字節存儲在起始地址
Big endian 將高序字節存儲在起始地址
網絡字節序:整數在網絡中的發送順序
網絡字節順序是TCP/IP中規定好的一種數據表示格式,它與具體的CPU類型、操作系統等無關,從而可以保證數據在不同主機之間傳輸時能夠被正確解釋。
網絡字節順序采用big endian排序方式
htons 本地的無符號short型主機字節序轉換為網絡字節序
htonl 本地的無符號long型主機字節序轉化為網絡字節序
ntohs 網絡字節序轉換為本地的無符號short型主機字節序
ntohl 網絡字節序轉換為 本地的無符號long型主機字節序
inet_addr: 將一個點間隔地址轉換成 struct in_addr
inet_ntoa: 將網絡字節序格式IP轉換到字符串
inet_aton: 將字符串轉換到網絡字節序格式IP
inet_pton: 將點十分進制轉換為網絡字節序
atoi: 將字符串轉換為整型數
在使用little endian的系統中 這些函數會把字節序進行轉換
在使用big endian類型的系統中 這些函數會定義成空宏
參考 http://blog.csdn.net/suwei19870312/article/details/5320831
http://www.360doc.com/content/12/0222/10/54470_188560773.shtml
函數使用需要注意的問題:
IPv4套接口地址數據結構
結構:
struct sockaddr_in {
short int sin_family; //IPV4協議為AF_INET
unsigned short int sin_port; //16位端口號,網絡字節序列
struct in_addr sin_addr;
unsigned char sin_zero[8]; //備用域,為了和struct sockaddr字節數保持相同;
};
struct in_addr{
in_addr_t s_addr;//32位IP地址,網絡字節序列
} ;
參考 https://my.oschina.net/SBaof/blog/477585