BitArray bits=new BitArray(16); // size 16-bit
有一个 bitArray,我想在 C# 中将这个数组中的 16 位转换为无符号整数,但我不能使用 copyto 进行转换,是否有其他方法可以从 16 位
转换为 UInt16
?
UInt16 res = 0;
for (int i = 0 ; i < 16 ; i++) {
if (bits[i]) {
res |= (UInt16)(1 << i);
}
}
这个算法逐一检查16位最低有效位,并使用按位或运算来设置结果的相应位。
var bits = new BitArray(16);
bits[1] = true;
var value = 0;
for (int i = 0; i < bits.Length; i++)
{
if (lBits[i])
{
value |= (1 << i);
}
}
这应该可以完成工作
private uint BitArrayToUnSignedInt(BitArray bitArray)
{
ushort res = 0;
for(int i= bitArray.Length-1; i != 0;i--)
{
if (bitArray[i])
{
res = (ushort)(res + (ushort) Math.Pow(2, bitArray.Length- i -1));
}
}
return res;
}
你可以在stackoverflow上查看这个问题的另一个答案:
(1 << i)
前面添加了(uint16)
,告诉 C# 在使用它进行OR
操作之前需要将表达式转换为uint16
。 - Sergey Kalinichenko