2009-11-10 4 views
2

Я знаю один способ сделать это,Как инициализировать struct in6_addr?

const struct in6_addr naddr6 = { { 
       0x3f, 0xfe, 0x05, 0x01, 
       0x00, 0x08, 0x00, 0x00, 
       0x02, 0x60, 0x97, 0xff, 
       0xfe, 0x40, 0xef, 0xab 
}}; 

, но не мог с этим,

const struct in6_addr naddr6 = 
       { { { 0x3ffe0501, 0x00080000, 0x026097ff, 0xfe40efab } } }; 

и кажется, что я мог или 1/2/3 париж из brackets.Why?

спасибо.

ответ

1

Поскольку одна потребность, чтобы указать, какой вид адреса его адресации (показано с помощью C99):

const struct in6_addr naddr6 = 
    { { .u6_addr32 = { 0x3ffe0501, 0x00080000, 0x026097ff, 0xfe40efab } } }; 

Первая пара кронштейн для in6_addr структуры, второй для объединения:

struct in6_addr 
    { 
    union 
     { 
uint8_t u6_addr8[16]; 
uint16_t u6_addr16[8]; 
uint32_t u6_addr32[4]; 
     } in6_u; 
    }; 
4

портативный способ сделать это так:

struct in6_addr s6 = { }; 
if (!IN6_IS_ADDR_UNSPECIFIED(&s6)) 
    inet_pton(AF_INET6, "2001:db8::1", &s6);