我想知道在C ++中存储IPv6的最有效方法是什么?
基本上我需要一种尽可能提供灵活性的格式,以及与现有库的兼容性。我的第一个想法是使用简单的std::vector<int>
,因为这样我就可以轻松访问地址的每个部分。
这是一个很好的解决方案吗?或者我以后可能会遇到麻烦?
答案 0 :(得分:7)
这应该没问题,但你可能想要做一个std :: vector&lt; uint8_t&gt;。我个人会使用c中的struct sockaddr_in6。
/* IPv6 address */
struct in6_addr
{
union
{
uint8_t u6_addr8[16];
uint16_t u6_addr16[8];
uint32_t u6_addr32[4];
} in6_u;
#define s6_addr in6_u.u6_addr8
#define s6_addr16 in6_u.u6_addr16
#define s6_addr32 in6_u.u6_addr32
};
包括这个:
#include <netinet/in.h>
这样你就可以使用地址的静态使用并完成它。在向量上重复执行push_back会变得非常麻烦并且使得阅读更加困难。
答案 1 :(得分:0)
您的意思是存储IPv6地址?如果是这样,int是不够的,每个都需要128位。