gpt4 book ai didi

c - 带有位域的奇怪大小的结构

转载 作者:行者123 更新时间:2023-11-30 16:45:37 25 4
gpt4 key购买 nike

我正在尝试将一些位域放入 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com