我到处搜索以找到一种简单的方法(例如在 C++ 中)在 C# 中执行此操作,我想我不知 Prop 体的搜索术语。在 C++ 中,我使用下面的代码放入一个 16 位无符号整数,然后我可以使用它轻松获取各个位。我如何在 C# 中执行此操作?我尝试了 BitArray,但它似乎没有提供一种方法来放入无符号 16 位值然后获取位。也许 BitArray
不是这样。
使用这种方式,我可以从我的设备(步进电机)读取状态寄存器值,将该值分配给位字段,并轻松访问其中的位,而无需额外的代码。
非常感谢您的帮助。
typedef union bitfield16_union
{
U16 uiWord; // unsigned short
struct
{
unsigned short b0 : 1; // LSB
unsigned short b1 : 1;
unsigned short b2 : 1;
unsigned short b3 : 1;
unsigned short b4 : 1;
unsigned short b5 : 1;
unsigned short b6 : 1;
unsigned short b7 : 1;
unsigned short b8 : 1;
unsigned short b9 : 1;
unsigned short b10 : 1;
unsigned short b11 : 1;
unsigned short b12 : 1;
unsigned short b13 : 1;
unsigned short b14 : 1;
unsigned short b15 : 1; // MSB
} b;
// ************
} BITFIELD16;
// ************
main
{
BITFIELD16 statusWord;
statusWord.uiWord = 154;
if(statusWord.b.b3) {do something}
}
最佳答案
虽然 C# 确实支持具有显式布局的重叠结构,但它不支持细化到单个位的级别。因此,这里最好的选择可能是使用位运算。这并不一定很困难:
public ushort Value { get; set; }
public bool this[int index] {
get => (Value & (1 << index)) != 0;
set {
if (value) Value |= (ushort)(1 << index);
else Value &= (ushort)~(1 << index);
}
} // Note untested
用法:
bool b3 = thing[3];
thing[5] = false;
关于c# - 将 16 位无符号整数状态字转换为位数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61069928/