开发者社区> 问答> 正文

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

展开
收起
a123456678 2016-06-06 13:46:11 4164 0
1 条回答
写回答
取消 提交回答
  • 码农|Coder| Pythonista
    答案没帮助,是错误的答案,答非所问
    采纳
    #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
    2019-07-17 19:28:24
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载