当我从字节数组转换时,我得到不同的二进制数据

时间:2012-08-22 07:38:50

标签: arrays byte bit

我的字节数组有前8个值, 0 0 12 12 0 0 127 224

然而,当我在转换后阅读bitarray时, 它有,

<00> 0000,0000 0000,0000 0011,0000 0011,0000 0000,0000 0000,0000 1111,1110 0000,0111

我不知道为什么bitarray有这些价值......

有人知道为什么会这样吗?

用于转换的代码是;

byte[] bytes = System.IO.File.ReadAllBytes(args[0]);

BitArray bits = new BitArray(bytes);

2 个答案:

答案 0 :(得分:0)

为了理解,需要从右到左读取所有位。

0000,0000 0000,0000 0011,0000 - &gt; 00001100 = 12 0011,0000 0000,0000 0000,0000 1111,1110 - &gt; 01111111 = 127 0000,0111

这就是BitArray的工作方式。

http://msdn.microsoft.com/en-us/library/x1xda43a.aspx

The first byte in the array represents bits 0 through 7,
the second byte represents bits 8 through 15, and so on.
The Least Significant Bit of each byte represents the lowest index value:
"bytes [0] & 1" represents bit 0,
"bytes [0] & 2" represents bit 1,
"bytes [0] & 4" represents bit 2,
and so on.

因此,数组中第一个字节的最低有效位是位数组中的第0位,而数组中第一个字节的第二个最低有效位是位数组中的第1位。

我不知道为什么他们这样做。

答案 1 :(得分:0)

由于某种原因,比特流被反转(作为比特的字符串表示)。如果你向后看它就可以了:

  • 224是"1110 0000",您将其作为"0000 0111"
  • 127为"0111 1111",您将其设为"0111 1111"