转换为int时,将忽略长度为4的BitArray中的最后两位

时间:2015-06-14 20:15:10

标签: c# binary int bit bitarray

考虑以下BitArray:

BitArray bitArray = new BitArray(new Boolean[] {true, true, false, false});

并且以二进制等于:

1100

现在我想将其转换为int并尝试使用此页面中描述的方法:How can I convert BitArray to single int?

但是,这两种方法都会将1100转换为3而不是12。因此,它似乎忽略了最后两位,并认为它的大小为2位,当然答案是3

上面链接页面上的一个方法,在行动中:

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

执行上述操作后,bitArray的值为3。

如何在代码中表达我希望它考虑所有4位?

1 个答案:

答案 0 :(得分:1)

BitArray(bool[])的构造函数接受索引顺序的值 - 然后CopyTo在传统意义中使用它们(因此bitArray[0]是最不重要的位) - 所以你的{{1 }},truetruefalse最终意味着二进制中的0011, 1100。

它没有忽略最后两位 - 它只是以与你预期的相反的顺序处理你的初始数组。

如果您希望在将位转换为整数时将第一个指定的值作为最多有效值,则需要反转输入数组。