[英]Convert 16-bit unsigned integer status word to bitarray
我在 C# 中搜索了高低以找到一种简单的方法(如在 C++ 中),我想我不知道具体的搜索词。 在 C++ 中,我使用下面的代码放入 16 位无符号 integer,然后我可以使用它轻松获取各个位。 如何在 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;
您可以使用Convert.ToString()
将 uint32 转换为其二进制字符串表示形式。
uint32 someNumber = 16384;
string binaryString = Convert.ToString(someNumber, 2);
从那里您可以使用Select
创建一个布尔数组。
bool[] bits = binaryString.Select( x => x == '1' ).ToArray();
根据您希望如何索引到位数组,您可能需要反转它。 反转它意味着最低有效位将位于索引 0:
bool[] bits = binaryString.Reverse().Select( x => x == '1' ).ToArray();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.