将 IP 地址从sockaddr_in6转换为in_addr
Convert IP address from sockaddr_in6 to in_addr
下面的转换工作正常,但是当我有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_in
转换为in_addr
的代码在哪里?
对不起,没办法。IPv6地址不能转换为struct in_addr
,除非在IPv4映射地址时发生极端情况。
IPv6 主机地址需要 16 个字节来存储,并且对于主机部分,在相同的标头中用struct in6_addr
覆盖。但是,此外,IPv6地址除了主机之外还包含范围,这对于例如链路本地地址可能至关重要。因此,仅使用主机部分是不够的。
您应该阅读编程双栈或仅IPv6应用程序的一般手册。特别是,struct sockaddr_storage
作为两个地址的公共存储,以及getaddrinfo
解析名称(仅数字或 NETDB)
相关文章:
- 防止主数据类型C++的隐式转换
- netcat command in c++
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- Difference in displaying cv2 Mat
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 没有成员命名 'setRawData' in 'QwtPlotCurve' - 转换 Qt 4.7 为 Qt 5.8
- 没有成员命名 'setResizeMode' in 'QHeaderView' - 转换 Qt 4.7 为 Qt 5.8
- 将位图转换为opencv :: mat in Jni
- 将字节字符串转换为 float[] arry in C++
- 转换LPVOID IN CHAR错误C2440:=
- Fibonacci C++-从“int”到“int*”的转换无效,并且初始化了“int fibo(int,int*,in
- 对于相互转换的类型,有没有办法绕过"deduced conflicting types for parameter in template instantiation"?
- 将 C# 中的"from ... in "迭代转换为C++ (Qt)
- 无法从 *const 转换为 &in += 运算符
- 将字符串in转换为c中的int