字节序转换函数与地址转换函数
字节序转换函数
常见的网络字节转换函数有:
unint16_t htons(uint16_t hostshort) => htons()
:host to network short,将short类型数据从主机字节序转换为网络字节序。unint16_t ntohs(uint16_t netshort) => ntohs()
:network to host short,将short类型数据从网络字节序转换为主机字节序。unint32_t htonl(uint32_t netlong) => htonl()
:host to network long,将long类型数据从主机字节序转换为网络字节序。unint32_t ntohl(uint32_t hostlong) => ntohl()
:network to host long,将long类型数据从网络字节序转换为主机字节序。
通常,
以
s
为后缀的函数中,s
代表2个字节short,因此用于端口号转换;以
l
为后缀的函数中,l
代表4个字节的long,因此用于IP地址转换。
例:htons() 用来将当前主机字节序转换为网络字节序,其中h
代表主机(host)字节序,n
代表网络(network)字节序,s
代表short,htons 是 h、to、n、s 的组合,可以理解为”将short型数据从当前主机字节序转换为网络字节序“。
htonl ,htons 正好与 ntohl, ntohs 相反
可通过帮助命令 man htonl 查看帮助
示例
我本机测试结果:
地址转换函数
为什么要有地址转换函数?
因为我们人为的能够认识的地址并不是32位的地址。给你一个32位的数值,我们并不知道 它的地址是什么样的. 我们习惯的地址是点分十进制的形式(192.168.0.100),而我们编程 的时候是指定的是32位的整数地址,所以就要引入地址转换函数。
头文件:
函数说明:
in_addr_t inet_addr(const char *cp) => inet_addr():
这表示将点分十进制的IP地址转换成32位的整数,通过返回值进行返回
char *inet_ntoa(struct in_addr in) => inet_ntoa:
这表示将一个地址结构转换成点分十进制的IP地址
int inet_aton(const char *cp,struct in_addr *inp) => inet_aton():
这表示将点分十进制的IP地址转换成网络字节序的地址 ,只不过通过一个struct in_addr *inp
地址结构输出(*inp
输出参数)
注意:inet_addr() 除了将字符串转换为32位整数,同时还进行网络字节序转换。
Last updated