Linux IP地址转换函数
通常,我们习惯可读性好的字符串来表示IP地址,比如使用点分十进制的字符串表示IPV4地址。但在编程中我们需要先把它转换为整型数据方能使用,而记录日志时则相反,下面介绍的函数可以将这两种形式的地址进行相互转换。
#include <arpa/inet.h>
// 将点分十进制字符串转换为十进制整数,失败时返回INADDR_NONE
in_addr_t inet_addr(const char *strptr);
// 同第一个函数功能一样,成功时返回1, 失败时返回0
int inet_aton(const char *cp, struct in_addr *inp);
/* 将十进制整型地址转换为点分十进制的字符串形式地址,该函数内部使用一个静态变量存储转化结果,
函数的返回值指向该静态地址,因此是不可重入函数!!! */
char *inet_ntoa(struct in_addr in);
/* 以上三个函数只支持IPV4的地址转换 */
推荐使用下面的两个地址转换函数,不仅可以转换IPV4,还可以转换IPV6地址,而且更加安全。
#include <netinet/in.h>
// 将字符串形式的IPV4或IPV6地址转换为整型地址,成功时返回1,失败返回0,并置errno。
int inet_pton(int af, char *src, void *dst);
/*将整型IPV4或IPV6地址转换为字符串形式的地址,最后一个参数指定目标存储单元的大小,
这两个宏可以帮助我们指定大小:
#include <netinet/in.h>
#define INET_ADDRSTRLEN 16
#define INET6_ADDRSTRLEN 46 */
const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt);

3221

被折叠的 条评论
为什么被折叠?



