inet_pton 在 ipv4 上没问题...但是用在ipv6上就出问题了...
IP1: 2a01:198:603:0:396e:4789:8e99:890f
IP2: 2a01:198:603:0::
IP3: 2a01::
前两个IP转化出来的结果是一样一样的...第三个又不一样了...不知道问题出在哪...
IP1, IP2 结果都是 0x9801012a
IP3 结果是 0x12a 了
代码如下:
#include <stdio.h>
#include <string.h>
#include <arpa/inet.h>
int main() {
struct in_addr ip;
char *addr1, *addr2, *addr3;
addr1 = strdup("2a01:198:603:0:396e:4789:8e99:890f");
addr2 = strdup("2a01:198:603:0::");
addr3 = strdup("2a01::");
inet_pton(AF_INET6, addr1, &ip);
printf("0x%x\n", ip.s_addr);
inet_pton(AF_INET6, addr2, &ip);
printf("0x%x\n", ip.s_addr);
inet_pton(AF_INET6, addr3, &ip);
printf("0x%x\n", ip.s_addr);
return 1;
}
结果:
0x9801012a
0x9801012a
0x12a
答案没帮助,是错误的答案,答非所问
采纳
#include <stdio.h>
#include <string.h>
#include <arpa/inet.h>
int main() {
struct in6_addr ip;
char *addr1, *addr2, *addr3;
addr1 = strdup("2a01:198:603:0:396e:4789:8e99:890f");
addr2 = strdup("2a01:198:603:0::");
addr3 = strdup("2a01::");
inet_pton(AF_INET6, addr1, &ip);
printf("0x%x%x%x%x\n", htonl(ip.s6_addr32[0]),htonl(ip.s6_addr32[1]),htonl(ip.s6_addr32[2]),htonl(ip.s6_addr32[3]));
inet_pton(AF_INET6, addr2, &ip);
printf("0x%x%x%x%x\n", htonl(ip.s6_addr32[0]),htonl(ip.s6_addr32[1]),htonl(ip.s6_addr32[2]),htonl(ip.s6_addr32[3]));
inet_pton(AF_INET6, addr3, &ip);
printf("0x%x%x%x%x\n", htonl(ip.s6_addr32[0]),htonl(ip.s6_addr32[1]),htonl(ip.s6_addr32[2]),htonl(ip.s6_addr32[3]));
return 1;
}
输出:
0x2a0101986030000396e47898e99890f
0x2a010198603000000
0x2a010000000
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。