【问题标题】:convert from BitArray to 16-bit unsigned integer in c#在 C# 中从 BitArray 转换为 16 位无符号整数
【发布时间】:2014-01-05 10:45:54
【问题描述】:
BitArray bits=new BitArray(16); // size 16-bit

有 bitArray,我想在 c# 中将此数组的 16 位转换为无符号整数, 我不能使用copyto进行转换,还有其他方法可以将16-bit转换为UInt16吗?

【问题讨论】:

    标签: c# asp.net int bit bitarray


    【解决方案1】:

    你可以这样做:

    UInt16 res = 0;
    for (int i = 0 ; i < 16 ; i++) {
        if (bits[i]) {
            res |= (UInt16)(1 << i);
        }
    }
    

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

    【讨论】:

    • res |= (1
    • @user2922938 糟糕,我忘了添加演员表。这应该在编辑后工作。
    • 请我是 C# 的初学者,你能解释一下,什么是 (cast)?
    • @user2922938 我在(1 &lt;&lt; i) 前面添加了(uint16),以告诉C# 表达式需要先转换为uint16,然后才能在OR 中使用。
    【解决方案2】:

    您可以遍历它并自己组合值。

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

    【讨论】:

      【解决方案3】:

      这应该做的工作

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

      【讨论】:

        【解决方案4】:

        您可以在该问题的 stackoverflow 中查看另一个答案:

        Convert bit array to uint or similar packed value

        【讨论】:

        • 那个例子使用了 COPYTO,他不能像问题中提到的那样使用它
        猜你喜欢
        • 2013-12-26
        • 1970-01-01
        • 2019-05-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-19
        • 1970-01-01
        相关资源
        最近更新 更多