【问题标题】:Converting an Ipv6 type address to network byte order将 IPv6 类型地址转换为网络字节顺序
【发布时间】:2013-03-27 09:35:17
【问题描述】:

我有一个如下格式的 ipv6 地址

uint32_t 地址6[4];

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

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

【问题讨论】:

  • 32位字是网络字节序吗?
  • 不,它们不是网络字节序。

标签: ipv6 uint32


【解决方案1】:

您需要了解地址在数组中的布局方式的详细信息。

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

例子:

地址:dead:beef:feed:face:cafe:babe: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]);
}

【讨论】:

  • 不应该调用 htonl 吗?
  • 正确的 ramrunner。谢谢你抓住它。已更正。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
  • 2013-06-28
  • 1970-01-01
  • 2017-08-26
  • 2011-02-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多