Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将IP地址从sockaddr\u in6转换为in\u addr_C++_Sockets_Visual C++ - Fatal编程技术网

C++ 将IP地址从sockaddr\u in6转换为in\u addr

C++ 将IP地址从sockaddr\u in6转换为in\u addr,c++,sockets,visual-c++,C++,Sockets,Visual C++,下面的转换工作正常,但当我使用IPV6时如何处理 sockaddr foo; in_addr_t ip_address = ((sockaddr_in)foo).sin_addr.s_addr; 以下代码失败: sockaddr foo; in_addr_t ip_address = ((sockaddr_in6)foo).sin6_addr.s_addr; Error 1 error C2679: binary '=' : no operator found which takes

下面的转换工作正常,但当我使用IPV6时如何处理

sockaddr foo;
in_addr_t ip_address = ((sockaddr_in)foo).sin_addr.s_addr;
以下代码失败:

sockaddr foo;
in_addr_t ip_address = ((sockaddr_in6)foo).sin6_addr.s_addr;

Error   1   error C2679: binary '=' : no operator found which takes a right-hand operand of type 'IN6_ADDR' (or there is no acceptable conversion)  

哪里是将
sockaddr\u in
转换为
in\u addr
的代码?

对不起,不行。IPv6地址无法转换为\u addr中的
结构,除非它是IPv4映射地址时发生了特殊情况

IPv6主机地址需要存储16个字节,对于主机部分,在相同的头文件中包含了
struct in6_addr
。但是,此外,IPv6地址还包含除主机之外的作用域,主机可能对链路本地地址至关重要。因此,仅仅使用主机部件是不够的


您应该阅读双栈或仅IPv6应用程序编程的一般手册。特别是,
struct sockaddr\u storage
作为两个地址的公共存储,以及
getaddrinfo
函数,该函数用于解析名称(仅数字或NETDB)。

IPv6和IPv4地址不能以这种方式转换。是否需要以IPv6格式显示的IPv4地址?您可能需要读取。