3

次の形式のIPv6アドレスがあります

uint32_t address6[4];

したがって、上記の配列には、全体で 16 バイトに相当する 4 つの uint32_t タイプのデータが格納されるため、ipv6 タイプのアドレスになります。

上記の形式で保存されたアドレスをネットワーク バイト オーダーに変換するにはどうすればよいですか?

4

1 に答える 1

6

アドレスが配列内でどのようにレイアウトされているかの詳細が必要になります。

通常、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]);
}
于 2013-07-02T20:34:55.690 に答える