s6_addr
член struct in6_addr
определяется как:
uint8_t s6_addr[16];
Поскольку это массив uint8_t
, а не один 128-битный целочисленный тип, проблема порядка байтовне возникает: вы просто копируете из исходного uint8_t [16]
массива в место назначения.Например, чтобы скопировать адрес 2001:888:0:2:0:0:0:2
, вы должны использовать:
static const uint8_t myaddr[16] = { 0x20, 0x01, 0x08, 0x88, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 };
memcpy(addr.sin6_addr.s6_addr, myaddr, sizeof myaddr);