Подтвердить что ты не робот

Преобразование int в бит-массив в .NET.

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

Если я, например, имеют int со значением 3 Я хочу массив, который имеет длину 8 и выглядит следующим образом:

0 0 0 0 0 0 1 1

Каждое из этих чисел находится в отдельном слоте в массиве размером 8.

4b9b3361

Ответ 1

Чтобы преобразовать int 'x'

int x = 3;

Один из способов, манипулируя по int:

string s = Convert.ToString(x, 2); //Convert to binary in a string

int[] bits= s.PadLeft(8, '0') // Add 0 from left
             .Select(c => int.Parse(c.ToString())) // convert each char to int
             .ToArray(); // Convert IEnumerable from select to Array

В качестве альтернативы, используя класс BitArray -

BitArray b = new BitArray(new byte[] { x });
int[] bits = b.Cast<bool>().Select(bit => bit ? 1 : 0).ToArray();

Ответ 2

Используйте класс BitArray.

int value = 3;
BitArray b = new BitArray(new int[] { value });

Если вы хотите получить массив для бит, вы можете использовать метод BitArray.CopyTo с массивом bool[].

bool[] bits = new bool[b.Count];
b.CopyTo(bits, 0);

Обратите внимание, что бит будет храниться от наименее значимого до наиболее значимого, поэтому вы можете использовать Array.Reverse.

И, наконец, если вы хотите получить 0 и 1 для каждого бита вместо booleans (я использую byte для хранения каждого бита, менее расточительный, чем int):

byte[] bitValues = bits.Select(bit => (byte)(bit ? 1 : 0)).ToArray();

Ответ 3

Используйте Convert.ToString (value, 2)

поэтому в вашем случае

string binValue = Convert.ToString (3, 2);

Ответ 4

Я просто столкнулся с экземпляром, где...

int val = 2097152;
var arr = Convert.ToString(val, 2).ToArray();
var myVal = arr[21];

... не дал результатов, которые я искал. В 'myVal' выше значение, сохраненное в массиве в позиции 21, было "0". Это должно было быть "1". Я не уверен, почему я получил неточное значение для этого, и это озадачило меня, пока я не нашел другой способ в С# преобразовать INT в бит-массив:

int val = 2097152;
var arr = new BitArray(BitConverter.GetBytes(val));
var myVal = arr[21];

Это дало результат "true" как логическое значение для "myVal".

Я понимаю, что это не самый эффективный способ получить это значение, но он был очень простым, простым и читаемым.

Ответ 5

int value = 3;

var array = Convert.ToString(value, 2).PadLeft(8, '0').ToArray();

Ответ 6

Я бы сделал это в одном слое, как показано ниже:

using System;
using System.Collections;

namespace stackoverflowQuestions
{
    class Program
    {
        static void Main(string[] args)
        {    
            //get bit Array for number 20
            var myBitArray = new BitArray(BitConverter.GetBytes(20));
        }
    }
}

Обратите внимание, что каждый элемент BitArray хранится как bool, как показано ниже в снимке:

введите описание изображения здесь

Итак, ниже работает код:

if (myBitArray[0] == false)
{
    //this code block will execute
}

но ниже код вообще не компилируется:

if (myBitArray[0] == 0)
{
    //some code
}