小编eve*_*ina的帖子

存储IPv4/IPv6地址的有效方法

我正在开发一个C/C++网络项目,它应该能够使用IPv4和IPv6网络堆栈.该项目仅适用于Linux.因此,我试图找到一种有效的方法来存储IP地址并区分协议系列.第一种方法是建立一个联盟:

struct ip_addr {
   uint8_t fam; // socket family type
   union {
       struct in_addr ipv4_sin_addr;
       struct in6_addr ipv6_sin_addr;
   }addr;
};
Run Code Online (Sandbox Code Playgroud)

第二种方法是typedef std::vector<unsigned char> IPAddressNumber在向量的字节数之后定义a 并产生差异.

第三种方法是使用gcc中的int128_t/uint128_t或__int128_t.

对于最后一种情况,我想知道哪些版本的GCC支持这些类型,适用于哪些平台(尤其是IA-32/IA-64)以及是否存在任何已知错误.此外,上述哪种解决方案可能是最方便的解决方案?

c++ gcc ipv4 ipv6 int128

7
推荐指数
2
解决办法
5689
查看次数

标签 统计

c++ ×1

gcc ×1

int128 ×1

ipv4 ×1

ipv6 ×1