2009-11-10 5 views
2

Je connais une méthode pour le faire,Comment initialiser struct in6_addr?

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

mais ne pouvait pas avec cela,

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

et il semble que je pouvais soit 1/2/3 paris de brackets.Why?

merci.

Répondre

1

Comme un besoin d'indiquer quelle forme de l'adresse, il s'adresse (illustrée à l'aide C99):

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

La première paire de support est pour la struct in6_addr, le second pour l'union:

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

La manière portable à faire est comme ceci:

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