Cómo inicializar estructura in6_addr?
-
19-09-2019 - |
Pregunta
Yo sé una método para hacer esto,
const struct in6_addr naddr6 = { {
0x3f, 0xfe, 0x05, 0x01,
0x00, 0x08, 0x00, 0x00,
0x02, 0x60, 0x97, 0xff,
0xfe, 0x40, 0xef, 0xab
}};
pero no pudo con esto,
const struct in6_addr naddr6 =
{ { { 0x3ffe0501, 0x00080000, 0x026097ff, 0xfe40efab } } };
y parece que bien podría 1/2/3 parís de brackets.Why?
gracias.
Solución
Debido a que una necesidad de indicar qué forma de la dirección que se dirige (se muestra, utilizando C99):
const struct in6_addr naddr6 =
{ { .u6_addr32 = { 0x3ffe0501, 0x00080000, 0x026097ff, 0xfe40efab } } };
El primer par soporte es para el struct in6_addr, el segundo para la unión:
struct in6_addr
{
union
{
uint8_t u6_addr8[16];
uint16_t u6_addr16[8];
uint32_t u6_addr32[4];
} in6_u;
};
Otros consejos
La forma portátil para hacer esto es así:
struct in6_addr s6 = { };
if (!IN6_IS_ADDR_UNSPECIFIED(&s6))
inet_pton(AF_INET6, "2001:db8::1", &s6);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow