Структура нечетного размера с битовыми полями
Я пытаюсь вписать несколько битовых полей в 3-байтовую структуру
#pragma pack(push, 1)
typedef struct _DSTEntry {
uint8_t reserved :6;
uint8_t startMonth:4;
uint8_t startDay:5;
uint8_t endMonth:4;
uint8_t endDay:5;
} __attribute__((packed)) DSTEntry;
#pragma pop
Однако размер DSTEntry всегда равен 5, хотя сумма всех битов равна 24. Я использую gcc 5.3.0.
1 ответ
Если у вас есть свобода перестановки элементов в структуре, вы можете попробовать это:
typedef struct _DSTEntry {
uint16_t reserved :6;
uint16_t startDay:5;
uint16_t endDay:5;
uint8_t startMonth:4;
uint8_t endMonth:4;
} __attribute__((packed)) DSTEntry;
Это привело к размеру 3 для меня, с gcc 4.9.2. Если поля должны оставаться в таком порядке, то я думаю, что лучшее, что вы можете сделать, это четыре байта с:
typedef struct _DSTEntry {
uint16_t reserved :6;
uint16_t startDay:5;
uint16_t startMonth:4;
uint8_t endDay:5;
uint8_t endMonth:4;
} __attribute__((packed)) DSTEntry;