将 16 字节 IPv6 转换为冒号分隔的字符串

Fly*_*Hat 2 c

假设我有 16 字节 ipv6 地址

\n\n
struct in6_addr {\n\xe3\x80\x80\xe3\x80\x80uint8_t s6_addr[16];\n};\n
Run Code Online (Sandbox Code Playgroud)\n\n

如何以跨平台方式将其转换为常规 IPv6 冒号分隔的字符串表示形式,并且无需访问 Internet?

\n\n

我可以以某种方式在 char* 缓冲区中 sprintf 吗?

\n

Jas*_*sen 5

使用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]);
Run Code Online (Sandbox Code Playgroud)

编辑:修复了索引拼写错误