【发布时间】:2015-01-07 11:48:54
【问题描述】:
我正在对一个遗留应用程序进行现代化改造,该应用程序将 IPv4 地址存储在一个固定大小的无符号长数组中。地址按主机字节顺序存储。也就是说,来自套接字 API 时为ntohl()'d,而去套接字 API 时为htonl()'d。
现在为了也支持 IPv6,我想知道如何处理这个数组。
我是否应该存储字符串表示形式,并将其设为char[INET6_ADDRSTRLEN] 甚至是std::vector<std::string> 或std::set<std::string> 的数组以支持更多地址。
或者,我可以存储in6_addr 结构,这可能比std::string 更有效,但是我想知道网络和主机字节顺序如何应用在这里?
【问题讨论】:
-
in6_addr绝对是比std::string更好的选择。 “网络和主机字节顺序在这里如何应用?”,你不能再使用简单的long值来存储 IPv6 地址。 -
所以只需使用 struct in6_addr 并且不要尝试将其转换为 128 位整数。看起来很公平。
-
@Philipp 是的。您应该提供一个用于封装 API 函数的类,正如我在上述链接问题的回答中所建议的那样。
-
你对存储的地址做了什么?
标签: c++ data-structures ipv6 endianness