Как преобразовать int в бит-массив?
Если я, например, имеют int со значением 3 Я хочу массив, который имеет длину 8 и выглядит следующим образом:
0 0 0 0 0 0 1 1
Каждое из этих чисел находится в отдельном слоте в массиве размером 8.
Как преобразовать int в бит-массив?
Если я, например, имеют int со значением 3 Я хочу массив, который имеет длину 8 и выглядит следующим образом:
0 0 0 0 0 0 1 1
Каждое из этих чисел находится в отдельном слоте в массиве размером 8.
Чтобы преобразовать 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();
Используйте класс 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();
Используйте Convert.ToString (value, 2)
поэтому в вашем случае
string binValue = Convert.ToString (3, 2);
Я просто столкнулся с экземпляром, где...
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".
Я понимаю, что это не самый эффективный способ получить это значение, но он был очень простым, простым и читаемым.
int value = 3;
var array = Convert.ToString(value, 2).PadLeft(8, '0').ToArray();
Я бы сделал это в одном слое, как показано ниже:
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
}