Как преобразовать порядок сетевых байтов в порядок байтов хоста и наоборот для адресов IPv6 в C?
Может ли кто-нибудь объяснить концепцию сетевого порядка байтов и порядка байтов хоста для адресов ipv6.
1 ответ
В IPv6 фактически нет разницы.
Следующее предполагает C на Linux и Windows:
В IPv4 адрес хранится как 32-разрядное целое число без знака, поэтому на него влияет порядковый номер системы. Поэтому он должен быть преобразован в сетевой порядок байтов, прежде чем он может быть отправлен по проводам.
Но адрес IPv6 хранится в sockaddr_in6
структура, в поле in6_addr
которая также является структурой, содержащей массив из 16 беззнаковых 8-битных символов.
Поэтому, поскольку адрес IPv6 всегда эффективно в порядке байтов в сети, нет необходимости выполнять какое-либо преобразование порядка байтов при работе с адресами IPv6, например, возвращенными из getaddrinfo()
, Вы можете просто относиться к in6_addr
структура как непрозрачные данные.