Convierta int a una matriz de bits en .NET

¿Cómo puedo convertir una int a una matriz de bits?

Si, por ejemplo, tengo una int con el valor 3, quiero una matriz, que tiene la longitud 8 y que se ve así:

0 0 0 0 0 0 1 1 

Cada uno de estos números está en una ranura separada en la matriz que tiene el tamaño 8.

Para convertir el int ‘x’

 int x = 3; 

Una forma, mediante la manipulación en el int:

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

Alternativamente, al usar la clase BitArray-

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

Use la clase BitArray .

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

Si desea obtener una matriz para los bits, puede usar el método BitArray.CopyTo con una matriz bool[] .

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

Tenga en cuenta que los bits se almacenarán de menos significativo a más significativo, por lo que es posible que desee utilizar Array.Reverse .

Y, por último, si quieres obtener 0s y 1s para cada bit en lugar de booleanos (estoy usando un byte para almacenar cada bit, menos desperdicio que un int ):

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

Use Convert.ToString (value, 2)

entonces en tu caso

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

Me encontré con una instancia donde …

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

… no produjo los resultados que estaba buscando. En ‘myVal’ anterior, el valor almacenado en la matriz en la posición 21 era ‘0’. Debería haber sido un ‘1’. No estoy seguro de por qué recibí un valor inexacto para esto y me desconcertó hasta que encontré otra forma en C # para convertir una INT en una matriz de bits:

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

Esto produjo el resultado ‘verdadero’ como un valor booleano para ‘myVal’.

Me doy cuenta de que esta puede no ser la forma más eficiente de obtener este valor, pero fue muy sencillo, simple y legible.

Lo lograría en una línea como se muestra a continuación:

 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)); } } } 

Tenga en cuenta que cada elemento de un BitArray se almacena como bool como se muestra en la imagen siguiente:

enter image description here

Así que debajo del código funciona:

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

pero debajo el código no comstack en absoluto:

 if (myBitArray[0] == 0) { //some code } 
 int value = 3; var array = Convert.ToString(value, 2).PadLeft(8, '0').ToArray(); 
  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; }