Два 4-битных битовых поля не складываются до размера одного байта - как исправить? - PullRequest
3 голосов
/ 22 апреля 2019

Я пытаюсь портировать библиотеку из linux в win32, есть структура, определяемая как:

struct X {
    unsigned int    type : 4;
    unsigned int    tag : 4;
}__attribute__((packed));

Размер должен быть 1, я изменил его на:

#pragma pack(push, 1)
struct X {
    unsigned int    type : 4;
    unsigned int    tag : 4;
};
#pragma pack(pop)

Но размер (X) это все еще 4, кодировка будет испорчена, как я могу изменить размер до 1?

1 Ответ

7 голосов
/ 22 апреля 2019

Используйте unsigned char вместо unsigned int:

struct X {
    unsigned char type : 4;
    unsigned char tag : 4;
};

static_assert(sizeof(X)==1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...