Как я могу преобразовать int в массив bool? - PullRequest
15 голосов
/ 15 декабря 2010

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

4 = { true, false, false }
7 = { true, true, true }
255 = { true, true, true, true, true, true, true, true }

Ответы [ 6 ]

13 голосов
/ 15 декабря 2010

Значение 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[] будет намного больше

8 голосов
/ 15 декабря 2010

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

var bools = new BitArray(new int[] { yourInt }).Cast<bool>().ToArray();
7 голосов
/ 15 декабря 2010
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();
1 голос
/ 22 марта 2018
    public static bool[] Convert(int[] input, int length)
    {
        var ret = new bool[length];
        var siz = sizeof(int) * 8;
        var pow = 0;
        var cur = 0;

        for (var a = 0; a < input.Length && cur < length; ++a)
        {
            var inp = input[a];

            pow = 1;

            if (inp > 0)
            {
                for (var i = 0; i < siz && cur < length; ++i)
                {
                    ret[cur++] = (inp & pow) == pow;

                    pow *= 2;
                }
            }
            else
            {
                for (var i = 0; i < siz && cur < length; ++i)
                {
                    ret[cur++] = (inp & pow) != pow;

                    pow *= 2;
                }
            }
        }

        return ret;
    }
0 голосов
/ 15 декабря 2010

Вы можете сделать это как двухэтапный процесс, сначала преобразовать целое число в двоичное (базовое 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');
}
0 голосов
/ 15 декабря 2010

Вы можете использовать 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...