c++ - 初始化 union

标签 c++ ipv6

上一个代码:

struct Inet_address{
char v4[4];
};
extern "C" Inet_address Inet_loopback = 
{
  {127,0,0,1}
};

修改后:

我已将 Inet_address 设为 union 体 这里的Inet地址是一个 union

union Inet_address{
char v4[4];
char v6[16];
};

现在我想对 extern "C"Inet_address Inet_loopback 做同样的操作 说,

extern "C" Inet_address Inet_loopback = 
{
 if(some condition)
  {127,0,0,1}  //It should be Inet_address.v4
 else
    { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 }  //This should be Inet_address.v6
};

请提出一个正确的方法来实现这个,因为我在这里遇到错误。

最佳答案

你不应该为此使用 char 数组 - 将 in_addrin6_addr 合并:

typedef union {
    struct in_addr inaddr;
    struct in6_addr in6addr;
} in46_addr_t;

设置 ipv4 环回地址:

addr.inaddr.s_addr = INADDR_LOOPBACK;

对于 IPv6:

addr.in6addr = in6addr_loopback; // pre-defined global variable (note: assumes linux socket API)

关于c++ - 初始化 union ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6115094/

相关文章:

c++ - 实现用于许可管理的服务器

c++ - 如何在C++中将std::string::const_iterator类型转换为int类型

c++ - 收集使用鼠标绘制的线条中的像素值

java - 将 IPv6 转换为 long 并将 long 转换为 IPv6

scala - 如何在 Scala 中将 IPv6 地址与 BigInteger 相互转换

java - 在 Java 中返回 IPv6

c++ - 试图避免在双点运算中舍入,无法超过双

c++ - Lambda 作为模板函数

mysql - 如何读取 MySQL 中以 varbinary 形式存储的 IPv6 地址?

Ruby URI 无法处理具有显式指定传出接口(interface)的链接本地 IPv6 地址?