为结构分配整数值

时间:2014-08-19 12:25:17

标签: c struct bit-fields

我有一个结构定义为:

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);

2 个答案:

答案 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;

这是最好的方法!