gpt4 book ai didi

c# - 将 16 位无符号整数状态字转换为位数组

转载 作者:行者123 更新时间:2023-12-04 10:15:43 25 4
gpt4 key购买 nike

我已经搜索了高低以找到一种简单的方法(如在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com