C语言 如何将值传递给位字段

qni6mghb  于 2023-02-03  发布在  其他
关注(0)|答案(2)|浏览(132)

我不知道如何将值传递给位域:

  • 在头文件中,我有下面的结构定义:
typedef struct { boolean Error; } Struct_A_T;

Struct_A_T Struct_A = {0U};
boolean WriteValue;

if (TRUE) {
  Struct_A.Error.index = WriteValue;
}
}
else {
  index++;
}

正如你所看到的,索引将递增,我希望WriteValue传递一个值到等于Struct_A_Error的索引的位位置,我不知道我应该如何定义它,并使位灵活,以便索引可以控制位位置。谢谢
期望将位位置更新为索引值

mm9b1k5b

mm9b1k5b1#

期望将位位置更新为索引值
位域不是这样工作的,在C语言中是不可能的。
C中的类型是静态的,它们不能在运行时改变,所以你的位域必须总是在同一个位置。
如果需要在内存位置中设置特定位,则必须在那里放置一个整数,并使用位移位和逻辑运算符将该位放置到所需的位置。

xzabzqsa

xzabzqsa2#

在我看来,OP不需要位字段或boolstruct成员,而是简单的 unsigned

#include <stdbool.h>

typedef struct {
  unsigned Error;
} Struct_A_T;

Struct_A_T Struct_A = {0U};

...
bool WriteValue;
...
if (TRUE) {
  unsigned mask = 1u << index; 
  if (WriteValue) Struct_A |= mask;
  else Struct_A &= ~mask;
}
...

index应小于unsigned位宽(通常为32)。

相关问题