假设我有16字节的ipv6地址

struct in6_addr {
  uint8_t s6_addr[16];
};

如何在不访问Internet的情况下,以跨平台的方式将其转换为常规的IPv6冒号分隔字符串表示?
我能在一个字符缓冲区中快速处理它吗?

最佳答案

使用inet_ntop()
如果你不能。

struct in6_addr a;
char buf[40];
...

sprintf(buf,"%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x",
    a.s6_addr[0], a.s6_addr[1], a.s6_addr[2], a.s6_addr[3],
    a.s6_addr[4], a.s6_addr[5], a.s6_addr[6], a.s6_addr[7],
    a.s6_addr[8], a.s6_addr[9], a.s6_addr[10], a.s6_addr[11],
    a.s6_addr[12], a.s6_addr[13], a.s6_addr[14], a.s6_addr[15]);

编辑:修复了索引错误

关于c - 将16字节的IPv6转换为以冒号分隔的字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27456868/

10-13 06:42