首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将ipv6地址从网络顺序转换为主机顺序

如何将ipv6地址从网络顺序转换为主机顺序
EN

Stack Overflow用户
提问于 2018-12-06 16:32:26
回答 1查看 1.5K关注 0票数 1

比方说,ipv6被定义为:

代码语言:javascript
复制
struct in6_addr
{
    union 
    {
        __u8        u6_addr8[16];
        __be16      u6_addr16[8];
        __be32      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
};

对于ipv4 (32位整数),我们将endianess转换为(使用htonl()):

代码语言:javascript
复制
Little endian: 0x0A0B0C0D
Big endian   : 0x0D0C0B0A

我正在从网络中解析一个数据包。那么,如果我认为ipv6是u6_addr32[4],那么下面是正确的吗?

代码语言:javascript
复制
u32_nw_order[0] = inet_ntop(u32_host_order[3])
u32_nw_order[1] = inet_ntop(u32_host_order[2])
u32_nw_order[2] = inet_ntop(u32_host_order[1])
u32_nw_order[3] = inet_ntop(u32_host_order[0])

如何正确地处理128位IPv6地址的endianness转换?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-06 16:37:24

您不需要这样做,IPv6将arn作为多字节整数进行编码或处理,因此不存在网络/主机端的概念。一个IPv6地址只是一个16个字节的序列。

所以,如果我认为ipv6是u6_addr324

不要那样做,通常是没有理由的-只需要处理__u8 u6_addr8[16];

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53655800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档