在C#中将BitArray转换为16位无符号整数

3
BitArray bits=new BitArray(16); // size 16-bit

有一个 bitArray,我想在 C# 中将这个数组中的 16 位转换为无符号整数,但我不能使用 copyto 进行转换,是否有其他方法可以从 16 位 转换为 UInt16

4个回答

6
你可以像这样做:
UInt16 res = 0;
for (int i = 0 ; i < 16 ; i++) {
    if (bits[i]) {
        res |= (UInt16)(1 << i);
    }
}

这个算法逐一检查16位最低有效位,并使用按位或运算来设置结果的相应位。


res |= (1 << i); 无法将整数(i)转换为UInt16(res) ?? - user2922938
@user2922938 抱歉,我忘记添加一个转换。在编辑后应该可以工作了。 - Sergey Kalinichenko
请问,我是C#的初学者,能否请您解释一下什么是“强制转换”(cast)? - user2922938
@user2922938 我在 (1 << i) 前面添加了 (uint16),告诉 C# 在使用它进行 OR 操作之前需要将表达式转换为 uint16 - Sergey Kalinichenko

0
你可以循环遍历它并组合值本身。
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);
    }
}

0

这应该可以完成工作

    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;
    }

-1

1
那个例子使用了COPYTO,正如问题中提到的那样,他无法使用它。 - Mauricio Gracia Gutierrez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接