从整数初始化BitArray

问题描述:

我想从整数值初始化一个System.BitArray实例。但是,它看起来像我没有得到正确的价值观。从整数初始化BitArray

我的代码是

​​

我也试过不BitConverter:

 var b = new BitArray(new int[] { 0xfa2 }); 

但是,这些尝试似乎工作。这些都是在这里提出的尝试:Convert int to a bit array in .NET

我的输出:01000101111100000000000000000000. 的excpected输出:111110100010.

任何帮助将非常感激!

+0

比较合适,除了一些前导零 – harold 2014-08-29 17:57:02

+0

它与建筑的endienness做。可能的重复http://*.com/questions/217980/c-sharp-little-endian-or-big-endian – wdosanjos 2014-08-29 17:57:53

+0

你会期望12位而不是32位?或者你在谈论这些位的顺序? – RadioSpace 2014-08-29 18:09:47

您从错误的方向循环。试试这个:

var b = new BitArray(BitConverter.GetBytes(0xfa2)); 
    for (int i = b.Count-1; i >= 0; i--) 
    { 
     char c = b[i] ? '1' : '0'; 
     Console.Write(c); 
    } 
    Console.WriteLine(); 
+0

就是这样。谢谢! – OzB 2014-08-29 18:28:12

这是一个Little-Endian vs Big-Endian的问题,所以你需要考虑hw体系结构的遗留问题。同样基于documentation,您需要更改打印BitArray的方式。

byte[] buffer = BitConverter.GetBytes((ushort)0xfa2); 

if (BitConverter.IsLittleEndian) Array.Reverse(buffer); 

var b = new BitArray(buffer); 

for (int i = 0; i < b.Count; i+=8) 
{ 
    for (int j=i + 7; j >= i; j--) 
    { 
     char c = b[j] ? '1' : '0'; 
     Console.Write(c); 
    } 
} 

Console.WriteLine(); 

参考:

阵列中的第一个字节表示位0至7,第二 字节表示比特8到15 , 等等。最低有效 位每个字节的表示最低索引值: “字节[0] & 1” 表示位0, “字节[0] & 2” 表示位1, “字节[0] & 4” 表示位2,等等。

+0

感谢您的详细解答! – OzB 2014-08-29 18:28:58

如文档BitArray Constructor (Int32[])指出:

在第一值数组元素的数字表示位0至31,所述阵列中的第二个数字代表比特32至63,等等。每个整数的最低有效位表示最低索引值:“值[0] & 1”表示位0,“值[0] & 2”表示位1,“值[0] 012”表示位2,并且等等。

当使用此构造也无需检查字节顺序,只是反向输出顺序:

var b = new BitArray(new int[] { 0xfa2 }); 
// skip leading zeros, but leave least significant bit: 
int count = b.Count; 
while (count > 1 && !b[count-1]) 
    count--; 
// output 
for (int i = count - 1; i >= 0; i--) 
{ 
    char c = b[i] ? '1' : '0'; 
    Console.Write(c); 
} 
Console.WriteLine();