我正在尝试将一些位域放入 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。
最佳答案
如果您可以自由地重新排列结构中的元素,您可以尝试以下操作:
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;
关于c - 带有位域的奇怪大小的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44066132/