我有一个结构定义为:
typedef struct {
uint8_t field1 : 6,
uint8_t field2 : 1,
uint8_t field3 : 1
} myStruct;
然后:
myStruct s;
一次为所有字段分配8位值的安全方法是什么,即:
s = 10;
编译器在尝试分配时会出错(显然,我甚至不暗示这是这样做的方法:))。
这是否会被推荐:
uint8_t a = 10;
s = * ((myStruct*) &a);
答案 0 :(得分:2)
您可以使用联合:
union myUnion {
struct myStruct ms;
uint8_t byte;
};
myUnion u;
u.byte = 10; /* Uses the same memory as myStruct and its fields. */
printf("field1=%u field2=%u field3=%u\n", u.ms.field1, u.ms.field2, u.ms.field3);
这曾经不赞成,但请参阅下面的@mafso评论,现在seems to be allowed。
答案 1 :(得分:0)
你不能像这样给结构元素赋值 -
myStruct s;
s = 10;
不允许。这不是一个正确的方法!
如果您喜欢以下内容 -
uint8_t a = 10;
s = * ((myStruct*) &a);
将值10
分配给位字段成员不是一种安全的方法!所以这样做就像 -
s.field1=xx; // Instead of xx, yy and zz assign values
s.field2=yy;
s.field3=zz;
这是最好的方法!