mrb*_*ude 10
IPv6确实需要ipv6地址的网络字节顺序.hton和ntoh都是关于将地址从存储在代码中的方式转换为如何将其存储在数据包中(反之亦然).所以问题就变成了如何将它存储在代码中.
此外,代码中IPv6地址的定义可以允许更多的方式来解决它而不仅仅是一个字节数组:
struct in6_addr
{
union
{
__u8 u6_addr8[16];
__u16 u6_addr16[8];
__u32 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
};
Run Code Online (Sandbox Code Playgroud)
对用户来说,IPv6地址表示为8个16位值.如果在代码中将地址存储为8个16位值,则在使用u6_addr16 []数组将其放入数据包时,需要在每个16位值上使用htons,并在检索每个16位时使用ntohs 16来自u6_addr16 []的位值.
这些链接很有帮助:
http://msdn.microsoft.com/en-us/library/ee175867.aspx
http://en.wikipedia.org/wiki/IPv6_address(特别是右上角的图表)