2013-03-27 159 views
2

我以下列格式具有IPv6地址转换的IPv6地址类型为网络字节顺序

uint32_t的adress6 [4];

所以上面的数组存储了4个uint32_t类型的数据,它们总共等于16个字节,因此是一个ipv6类型的地址。

如何将以上格式存储的地址转换为网络字节顺序?

+0

是网络字节顺序的32位字? – 2013-03-27 14:32:45

+0

不,它们不是网络字节顺序。 – 2013-04-10 06:07:20

回答

5

您需要详细说明如何在阵列中布置地址。

通常,IPv6地址是使用网络顺序的uint32元素构建的。 uint32元素本身以主机顺序存储。

实施例:

ADDRESS:死:牛肉:进料:脸:咖啡馆:宝贝:BAAD:c0de

adress6[0] = 0xdeadbeef; 
adress6[1] = 0xfeedface; 
adress6[2] = 0xcafebabe; 
adress6[3] = 0xbaadc0de; 

阵列是在网络顺序但每个整数元素将是在宿主订购。

要进入网络顺序,你可以做类似如下:

void network_order_me (uint32_t *host_ipv6, uint32_t *net_ipv6) { 
    net_ipv6[0] = htonl(host_ipv6[0]); 
    net_ipv6[1] = htonl(host_ipv6[1]); 
    net_ipv6[2] = htonl(host_ipv6[2]); 
    net_ipv6[3] = htonl(host_ipv6[3]); 
} 
+0

不应该打电话给htonl吗? – ramrunner 2014-12-19 04:06:28

+0

正确的ramrunner。感谢您的支持。纠正。 – 2015-03-06 17:15:07

相关问题