我的设计要求在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风格的铸造中完成,因为标准和诸如此类…眼睛滚动
解决方法
union Ints { struct { int part1 : 10; int part2 : 6; int part3 : 16; } word; uint32_t another_way_to_access_word; };
可能有帮助