原文链接:IP地址转换总结
发布时间:2017-03-08 22:33:56
一、IP地址结构体相关定义
本文只讨论IPv4的情况,IPv6的相关转换,在项目中我也使用过,基本类似。
1 | struct sockaddr_in { |
in_addr_t 是32位无符号数。
二、将点分十进制的字符串IP转换为整数IP
1 | in_addr_t inet_addr(const char *cp); /*返回网络字节序*/ |
它们都有一个小缺陷,当转换”255.255.255.255”会失败,认为这个地址无效。
1 | int inet_aton(const char *string, struct in_addr*addr);/*addr是传出参数,将得到网络字节的整数IP*/ |
这个函数比上面两个函数更完善,建议IPv4使用这个函数。
1 | int inet_pton(int af, const char *src, void *dst);/*dst是传出参数,是in_addr的地址,得到网络字节序*/ |
这个函数支持IPv4和IPv6版本,由参数af来确定是哪个IP版本,取值为AF_INET和AF_INET6.
三、将整数IP转换为点分十进制字符串IP
1 | char* inet_ntoa(struct in_addr in); /*in是网络字节序,该函数线程不安全,尽量少用*/ |
也是支持IPv4和IPv6版本,注意缓冲区的长度。