字节转换函数:
字节转换函数的存在主要是因为存在大端以及小端两种不同的字节序。
为了保证通信的正常进行,需要对一些数据进行转换。
#include <netinet/in.h> uint16_t htons(uint16_t host16bitvalue) uint32_t htonl(uint16_t host32bitvalue)
这两个函数返回网络序的值;
uint16_t ntohs(uint16_t host16bitvalue) uint32_t ntohl(uint16_t host32bitvalue)
这两个函数返回主机序的值;
这些函数的具体作用可以通过函数名来进行记忆,不必死记。
其中,h代表host;n代表network;s代表short,为16位,例如端口号;l代表long,为32位,例如IP地址;
例如htons的作用就是就是host to network的转型,而且是16位的。
地址转换函数:
地址转换函数主要将IP地址在点分十进制数和32位二进制数之间进行转换
#include <arpa/inet.h> int inet_pton(int af, const char *src, void *dst)
这个函数转换字符串(点分十进制数)转换为32位二进制数
具体作用也可以用函数名来记忆。p代表presentation,n代表numeric。pton作用就是由presentation转型为numeric。
第一个参数af是地址族,转换后存在dst中
inet_pton 是inet_addr的扩展,支持的多地址族有下列:
AF_INET:src为指向字符型的地址,即ASCII的地址的首地址(ddd.ddd.ddd.ddd格式的),函数将该地址转换为in_addr的结构体,并复制在*dst中
AF_INET6:rc为指向IPV6的地址,,函数将该地址转换为in6_addr的结构体,并复制在*dst中
如果函数出错将返回一个负值,并将errno设置为EAFNOSUPPORT,如果参数af指定的地址族和src格式不对,函数将返回0。
const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt)
具体作用也可以用函数名来记忆。p代表presentation,n代表numeric。ntop作用就是由numeric转型为presentation。
这个函数转换32位二进制数转换为字符串(点分十进制数)
参数的作用和上面相同,只是多了一个参数socklen_t cnt,他是所指向缓存区dst的大小,避免溢出,如果缓存区太小无法存储地址的值,则返回一个空指针,并将errno置为ENOSPC