【问题标题】:How to represent an IPv6 in C++?如何在 C++ 中表示 IPv6?
【发布时间】:2026-02-16 12:35:01
【问题描述】:

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

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

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

【问题讨论】:

  • 为了最好地回答这个问题,我认为我们需要知道 a) 您从哪里获取地址,b) 您打算如何使用它们(或者您将传递哪些 API他们去。)
  • 这是一个奇怪的问题,因为默认表示通常被认为是最有效的。详细说明为什么不这样做可能更有成效。

标签: c++ vector format int ipv6


【解决方案1】:

您的意思是存储 IPv6 地址?如果是这样,int 是不够的,你需要每个 128 位。

【讨论】:

  • 我相信他的意思是将每个字节作为单独的插入存储到向量中。
  • 那么c结构应该更好。此外,还应注意原始数据包格式。
【解决方案2】:

应该没问题,但你可能想做一个 std::vector。我个人会使用 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_backs 会变得非常麻烦,并且更难阅读。

【讨论】: