【发布时间】:2016-08-16 03:19:21
【问题描述】:
我有一个结构来表示具有如下位字段的 29 位 CAN 标识符。
struct canId
{
u8 priority :3;
u8 reserved :1;
u8 dataPage :1;
u8 pduFormat :8;
u8 pduSpecific :8;
u8 sourceAddress :8;
} iD;
在我的代码中,我想将此结构复制到一个整数变量中。比如:
int newId = iD;
但是我不确定这是否正确。有人可以评论吗?
编辑:我可以在每个字段上使用移位运算符,然后使用按位 OR 将它们放在正确的位置。但这首先使使用带有位字段的结构毫无用处。
【问题讨论】:
-
不,一点也不,除此之外,任何填充都足以把事情搞砸。
-
联合可能是一个很好的解决方案。
-
@Siguza 这是位域,所以你必须看冒号的右边。
-
我很确定这实际上并不那么容易。
-
@Boiethios 禁止读取与写入对象不同的联合字段,因此,不,这不是一个好的解决方案。