2013-03-27 3 views
2

Я имею IPv6 адрес в следующем форматеПреобразование адреса типа сети IPv6 в порядке байт

uint32_t adress6 [4];

Таким образом, приведенный выше массив хранит данные типа 4 uint32_t, равные 16 байтам в целом и, следовательно, адрес типа ipv6.

Как преобразовать адрес, хранящийся в вышеуказанном формате, в сетевой порядок байтов?

+0

ли 32-разрядные слова в сетевом порядке байт? –

+0

Нет, они не входят в сетевой порядок байтов. –

ответ

5

Вам понадобятся сведения о том, как адрес расположен в массиве.

Как правило, адрес IPv6 построен с элементами uint32 в сетевом порядке. Сами элементы uint32 хранятся в порядке хоста.

Пример:

АДРЕС: мертвая: говядина: корм: лицо: кафе: младенец: 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

+0

Правильный ramrunner. Спасибо, что поймали его. Исправленный. –

 Смежные вопросы

  • Нет связанных вопросов^_^