Как преобразовать int в массив bool (представляющий биты целого)? Например:Как преобразовать int в массив bool?
4 = { true, false, false }
7 = { true, true, true }
255 = { true, true, true, true, true, true, true, true }
Как преобразовать int в массив bool (представляющий биты целого)? Например:Как преобразовать 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();
Вы можете использовать BitArray.
var bools = new BitArray(new int[] { yourInt }).Cast<bool>().ToArray();
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 b = new BitArray(new int[] { 255 });
Однако, он будет использовать все биты в значении, так что выше вы получите BitArray
с длиной 32, так как тип данных int
- 32 бит.
Вы можете создать BitArray
из байт, который даст вам восемь булевых из каждого байта:
var b = new BitArray(new byte[] { 255 });
Вы можете получить массив с только значащими битами, пропуская ведущую falses:
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');
}
`новый ИНТ [yourInt]` `должен быть новый ИНТ [] {yourInt}` ` – 2010-12-15 08:50:13
Если yourInt` 255, он не будет создавать массив с длиной восемь полный истины или даже массив длиной 32, где последние восемь верны, он создаст массив длиной 8160, который будет заполнен ложным. – Guffa 2010-12-15 08:53:43
@ Guffa: В коде есть ошибка. См. Комментарий @Albin Sunnanbo. Если мы исправим комментарий @ Albin, тогда размер массива равен 32. – dhinesh 2010-12-15 08:59:59