【发布时间】:2014-09-08 23:15:47
【问题描述】:
我的设计要求值包含在 32 位字内的某些位中。示例是位 10-15 必须保持值 9,其余位均为 0。因此,为了简单/可读性,我创建了一个结构,其中包含所要求内容的分解版本。
struct {
int part1 : 10;
int part2 : 6;
int part3 : 16;
} word;
然后我可以将part2 设置为等于请求的任何值,并将其他部分设置为 0。
word.part1 = 0;
word.part2 = 9;
word.part3 = 0;
我现在想要获取该结构,并将其转换为单个 32 位整数。我确实通过强制转换来编译它,但它似乎不是一种非常优雅或安全的数据转换方式。
int x = *reinterpret_cast<int*>(&word);
如果我尝试将其转换为普通的reinterpret_cast<int>(word),则会收到以下错误:
invalid cast from type 'ClassName::<anonymous struct>' to type 'int'
必须有更好的方法来做到这一点,我就是想不通。提前致谢!
注意:必须在 c++ 风格的转换中完成,因为标准等等...... 眼睛滚动
【问题讨论】:
-
是的,现在我不再为 IBM 工作,我只想使用工会。 (不能在 IBM 中提到 U 字,你知道。)
-
请注意,这些位域在
int内的位置没有定义,只有它们占用的位数。 -
@HotLicks 是的,它不是 IBM,但绝对是一个有着相似观点的地方 :)