ipv6 地址能用 inet_pton 函数转成字节序么?

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
阅读 12.9k
2 个回答
#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
新手上路,请多包涵

include <stdio.h>

include <string.h>

include <arpa/inet.h>

int main() {
struct in6_addr ip;
char *addr1, *addr2, *addr3;
int i = 0;

addr1 = strdup("2a01:198:603:0:396e:4789:8e99:890f");
addr2 = strdup("2a01:198:603:0::");
addr3 = strdup("::ffff:127.0.0.1");

inet_pton(AF_INET6, addr1, &ip);
for(i = 0; i < 16; i ++)
    printf("0x%x ", ip.s6_addr[i]);

printf("\n");
inet_pton(AF_INET6, addr2, &ip);
for(i = 0; i < 16; i ++)
    printf("0x%x ", ip.s6_addr[i]);

printf("\n");
inet_pton(AF_INET6, addr3, &ip);
for(i = 0; i < 16; i ++)
    printf("0x%x ", ip.s6_addr[i]);
printf("\n");
return 1;

}

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进