为什么我使用新的BitArray(byte []),找不到正确的位

时间:2019-06-27 09:32:27

标签: c# bitarray

byte[] test = new byte[] {36, 146};

BitArray ba = new BitArray(test);

for(int i = 0; i < ba.Length; i++)
  Debug.Log(ba[i]);

我要获取的位数是:

False False True False False True False False True False False True False False True False

但返回是:

False False True False False True False False False True False False True False False True

为什么?

1 个答案:

答案 0 :(得分:1)

让我们尝试一些不同的数字,例如17,让我们得到不同的输出:

 byte[] test = new byte[] {1, 7};

 BitArray ba = new BitArray(test);

 StringBuilder sb = new StringBuilder();

 for (int i = 0; i < ba.Length; i++) {
   if (i > 0 && i % 8 == 0)
     sb.Append(' ');

   sb.Append(ba[i] ? '1' : '0');
 }

 Console.Write(sb.ToString());

结果:

 10000000 11100000

您能看到发生了什么吗?

   1 -> 0b00000001 -> 10000000 -> True False False False False False False False
   7 -> 0b00000111 -> 11100000 -> True  True  True False False False False False

让我们返回初始值:36, 146

  36 -> 0b00100100 -> 00100100 -> False False  True False False  True False False
 146 -> 0b10010010 -> 01001001 -> False  True False False  True False False  True 

当我们将1放在二进制中时,第一位是最右00000001,但是当我们将相同的1表示为位数组时, 最左:第一位:[1, 0, 0, 0, 0, 0, 0, 0] == [True, False, False, False, False, False, False, False]

不幸的是,36是二进制回文 00100100,它从左到右和从右到左读为相等,我认为这是造成意外行为的原因(为什么前8位正确而后8位不正确)。