BitArray для целочисленного выпуска - PullRequest
1 голос
/ 14 марта 2012
public static int getIntegerFromBitArray(BitArray bitArray)
{
  var result = new int[1];
  bitArray.CopyTo(result, 0);
  return result[0];
}

// Input  A) 01110
// Output A) 14
// Input  B) 0011
// Output B) 12 <=== ????? WHY!!! :)

Может кто-нибудь объяснить, почему мое второе возвращаемое значение равно 12 вместо 3 ?? Пожалуйста ... Спасибо.

Ответы [ 2 ]

10 голосов
/ 14 марта 2012

По сути, он рассматривает биты в порядке, противоположном тому, который вы ожидали - вы не показали, как отображаете входной двоичный файл в BitArray, но в результате вы рассматриваете его как 1100, а не 0011.

Документация не ясна, правда, но она работает так, как Я бы ожидал, что: bitArray[0] представляет наименьшее значимое значение, как обычно это при обсуждении двоичного кода (поэтому бит 0 равен 0/1, бит 1 равен 0/2, бит 2 равен 0/4, бит 3 равен 0/8 и т. д.). Например:

using System;
using System.Collections;

class Program
{
    static void Main(string[] args)
    {
        BitArray bits = new BitArray(8);
        bits[0] = false;
        bits[1] = true;

        int[] array = new int[1];
        bits.CopyTo(array, 0);
        Console.WriteLine(array[0]); // Prints 2
    }
}
1 голос
/ 14 марта 2012

Вам нужно повернуть биты в правильном направлении, чтобы получить правильные результаты. 1100 - это 12

...