如何将BitArray转换为单个int?

时间:2011-03-12 14:46:40

标签: c# .net binary integer base-class-library

如何将BitArray转换为单个int

4 个答案:

答案 0 :(得分:52)

private int getIntFromBitArray(BitArray bitArray)
{

    if (bitArray.Length > 32)
        throw new ArgumentException("Argument length shall be at most 32 bits.");

    int[] array = new int[1];
    bitArray.CopyTo(array, 0);
    return array[0];

}

答案 1 :(得分:8)

private int getIntFromBitArray(BitArray bitArray)
{
    int value = 0;

    for (int i = 0; i < bitArray.Count; i++)
    {
        if (bitArray[i])
            value += Convert.ToInt16(Math.Pow(2, i));
    }

    return value;
}

答案 2 :(得分:3)

此版本:

  • 最多可使用64位
  • 不依赖于BitArray实现细节的知识
  • 不需要不必要地分配内存
  • 不引发任何异常(如果您期望更多位,请随时添加检查)
  • 应该比合理的表现更重要

实施:

public static ulong BitArrayToU64(BitArray ba)
{
    var len = Math.Min(64, ba.Count);
    ulong n = 0;
    for (int i = 0; i < len; i++) {
        if (ba.Get(i))
            n |= 1UL << i;
    }
    return n;
}

答案 3 :(得分:0)

对这篇文章的反馈(#43935747)。值X是短tpe,我设置了两位(6和10),如下所示:    短X = 1;

        var result = X;
        var bitsToSet = new [ ] { 5,9 };
        foreach ( var bitToSet in bitsToSet )
            {
            result+=( short ) Math.Pow ( 2,bitToSet );
            }
        string binary = Convert.ToString ( result,2 );

现在我想读取值X中的特定所有位并将其放入数组或类似bool的类型Val1 = bit1,bool Val2 = bit2 ....

我是新手,我认为这对你来说非常简单..