Как преобразовать int в массив bool (представляющий биты целого)? Например:
4 = { true, false, false }
7 = { true, true, true }
255 = { true, true, true, true, true, true, true, true }
Как преобразовать int в массив bool (представляющий биты целого)? Например:
4 = { true, false, false }
7 = { true, true, true }
255 = { true, true, true, true, true, true, true, true }
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();
Вы можете использовать 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();
Вы можете сделать это как двухэтапный процесс, сначала преобразовать целое число в двоичное (базовое 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');
}