如何用C++表示IPv6?

lau*_*ent 1 c++ format int vector ipv6

我想知道在C++中存储IPv6的最有效方法是什么?

基本上我需要一种尽可能提供灵活性的格式,以及与现有库的兼容性.我的第一个想法是使用一个简单的,std::vector<int>因为这将允许我轻松访问地址的每个部分.

这是一个好的解决方案吗?或者我以后可能会遇到麻烦?

Dav*_*ond 7

这应该没问题,但你可能想做一个std :: vector <uint8_t>.我个人会使用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
  };
Run Code Online (Sandbox Code Playgroud)

包括这个:

  #include <netinet/in.h>
Run Code Online (Sandbox Code Playgroud)

这样你就可以使用地址的静态使用并完成它.在向量上重复执行push_back会变得非常麻烦并且使得阅读更加困难.