【发布时间】:2018-08-15 07:46:03
【问题描述】:
这里是代码。
struct test {
struct abc {
int a : 24;
union b {
int b1 : 10;
int b2 : 14;
};
};
int c : 8;
};
我想将结构 abc 设置为 3 字节大小,再加上一个额外的 1 字节大小变量以生成 4 字节结构。但是,由于内部结构实际上显示为 4 个字节,而结构测试的总大小为 5 个字节。
我使用的是 Visual Studio 2017 版本。 (而且我也已经使用了打包选项)
如何将结构调整为 4 个字节?这是在已经在使用的代码中发现的一个错误,因此依赖关系太大,以至于我无法更改变量的顺序或在其中创建新结构。
【问题讨论】:
-
大小
test: 4 -
创建 5 个字节的结构没有意义,根据编译器标志,填充到 4 或 8 会丢失。
-
是的,
b1和b2重叠,因为union,占用相同的 14 位。 -
不可能联合最少 2 个字节加上 3 个字节字段
a -
int c : 8;是 4 个字节(我假设在您的平台上 sizeof(int) 是 4)。即使明确省略,隐含的int : 24余数仍然存在。 Binghe Zhai 的答案很有效,因为byte是 8 位(可能因平台而异,我再次假设)。
标签: c++ visual-studio-2017 unions bit-fields