проблема битового поля в Visual C ++ - PullRequest
0 голосов
/ 04 марта 2012

Я хочу использовать эту структуру в Visual C ++:

struct iphdr
{
    unsigned int ihl:4;
    unsigned int version:4;

    u_int8_t tos;
    u_int16_t tot_len;
    u_int16_t id;
    u_int16_t frag_off;
    u_int8_t ttl;
    u_int8_t protocol;
    u_int16_t check;
    struct in_addr ip_src;
    struct in_addr ip_dst;

};

, но при отладке я обнаружил sizeof(struct iphdr) = 24, который ожидался равным 20 И странно, что когда я заменяю ihl иversion с char, sizeof(struct iphdr) = 20

1 Ответ

1 голос
/ 04 марта 2012

Битовые поля ihl и version будут помещены в поле unsigned int (несмотря на то, что они вписываются в символ)Следовательно, поле tos будет размещено со смещением 4, а tot_length со смещением 6 из-за заполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...