c - 将整数值分配给结构

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

?

最佳答案

你可以使用 union :

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现在。

关于c - 将整数值分配给结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25383396/

相关文章:

python - 在 Python 中进行位域操作的最佳方法是什么?

c - printf 格式说明符中的索引说明

c - 我的书用 C 语言实现插入排序

c - 在 'C' 中的结构元素之间手动插入填充字节

c - C 中的可移植性问题

c - c中零长度位字段的不同类型?

c - 如何从此程序中获取每个元素的值

c - 将无符号字符数组作为参数传递 - 数组未正确传递

c - 结构问题,为什么会出现此错误?

c - union 和位域——它们如何工作?