我正在尝试将一些位域放入一个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的sizeof总是5,尽管所有位的总和是24。 我正在使用gcc 5.3.0。
答案 0 :(得分:0)
如果您可以自由重新排列结构中的元素,可以试试这个:
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;