Как я могу конвертировать BitArray в один int? - PullRequest
29 голосов
/ 12 марта 2011

Как я могу преобразовать BitArray в один int?

Ответы [ 4 ]

53 голосов
/ 12 марта 2011
private int getIntFromBitArray(BitArray bitArray)
{

    if (bitArray.Length > 32)
        throw new ArgumentException("Argument length shall be at most 32 bits.");

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

}
8 голосов
/ 12 августа 2012
private int getIntFromBitArray(BitArray bitArray)
{
    int value = 0;

    for (int i = 0; i < bitArray.Count; i++)
    {
        if (bitArray[i])
            value += Convert.ToInt16(Math.Pow(2, i));
    }

    return value;
}
3 голосов
/ 19 июля 2018

Эта версия:

  • работает до 64 бит
  • не полагается на знание деталей реализации BitArray
  • не требует ненужного выделения памяти
  • не выдает никаких исключений (не стесняйтесь добавлять чек, если вы ожидаете больше битов)
  • должно быть более чем разумно работоспособным

Реализация:

public static ulong BitArrayToU64(BitArray ba)
{
    var len = Math.Min(64, ba.Count);
    ulong n = 0;
    for (int i = 0; i < len; i++) {
        if (ba.Get(i))
            n |= 1UL << i;
    }
    return n;
}
0 голосов
/ 12 мая 2017

Ссылка на этот пост (# 43935747).Значение X - это short tpe, поэтому я установил два бита (6 и 10), как показано ниже: short X = 1;

        var result = X;
        var bitsToSet = new [ ] { 5,9 };
        foreach ( var bitToSet in bitsToSet )
            {
            result+=( short ) Math.Pow ( 2,bitToSet );
            }
        string binary = Convert.ToString ( result,2 );

Теперь я хотел бы прочитать все конкретные биты из значения X и поместить его вв массив или битовый тип, такой как bool Val1 = bit1, bool Val2 = bit2 ....

Я новичок, и я думаю, что это довольно просто для вас, ребята ..

...