Как преобразовать int в массив bool?

Как преобразовать int в массив bool (представляющий биты целого)? Например:

4 = { true, false, false }
7 = { true, true, true }
255 = { true, true, true, true, true, true, true, true }
5 ответов

Int32 number = 10;
var array = Convert.ToString(number, 2).Select(s => s.Equals('1')).ToArray();

- Edit -

Использование метода расширения:

public static class Int32Extensions
{
 public static Boolean[] ToBooleanArray(this Int32 i)
 {
 return Convert.ToString(i, 2 /*for binary*/).Select(s => s.Equals('1')).ToArray();
 }
}

Использование:

var boolArray = number.ToBooleanArray();


An int должен хорошо сочетаться с BitVector32 (или BitArray)

int i = 4;
 var bv = new BitVector32(i);
 bool x = bv[0], y = bv[1], z = bv[2]; // example access via indexer

Однако лично я просто использовал сдвиги (>> и т.д.) и сохранил его как int. bool[] будет намного больше


Вы можете использовать BitArray.

var bools = new BitArray(new int[] { yourInt }).Cast<bool>().ToArray();
</bool>


Вы можете сделать это как двухэтапный процесс, сначала преобразовать целое число в двоичное (базовое 2) строковое представление, используя Convert.ToString а затем перебираем эту строку, чтобы заполнить BitArray.

Например:

int someInt = 7;
string binaryString = Convert.ToString(someInt, 2); 
BitArray bitArray = new BitArray(binaryString.Length); 
for (int i = 0; i < bitArray.Length; i++)
{
 bitArray[i] = (binaryString[i] == '1');
}


Вы можете использовать BitArray, чтобы легко получить набор булевых чисел из числа:

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

Тем не менее, он будет использовать все биты в значении, поэтому выше вы получите BitArray с длиной 32, поскольку тип данных int - 32 бита.

Вы можете создать BitArray из байтов, что даст вам восемь булевых элементов из каждого байта:

var b = new BitArray(new byte[] { 255 });

Вы можете получить массив с только значимыми битами, пропуская ведущие фальши:

bool[] b = new BitArray(42).Cast<bool>().SkipWhile(x => !x).ToArray();
</bool>

licensed under cc by-sa 3.0 with attribution.