2011-07-20 12 views
42

¿Cómo puedo convertir una int a una matriz de bits?Conversión de int a una matriz de bits en .NET

Si, p. tener un int con el valor 3 Quiero una matriz, que tiene la longitud 8 y que tiene este aspecto:

0 0 0 0 0 0 1 1 

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

+0

Espera, ¿quieres convertir 'int' en' byte' o 'bit-array'? – Bobby

+0

Un byte contiene 8 bits, así que sí, quiero una matriz que contenga 8 bits, uno en cada ranura. – Afra

+0

Debe editar su pregunta con esa actualización –

Respuesta

38

Para convertir el int 'x'

int x = 3; 

Una forma, por 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 

Por otra parte, mediante el uso de la BitArray de clase

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

¡Gracias! Terminé con este código: cadena s = Convert.ToString (número, 2); char [] bits = s.PadLeft (8, '0'). ToCharArray(); – Afra

12

uso Convert.ToString (value, 2)

por lo que en su caso

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

+3

Y luego '.ToCharArray()', ya que él quiere una matriz. –

+1

De hecho, para la matriz use .ToCharArray(), leo demasiado rápido: p – Tjekkles

68

Utilice la clase BitArray.

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

Si desea obtener una matriz para los bits, puede utilizar 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 almacenan desde el menos significativo al más significativo, por lo que es posible que desee utilizar Array.Reverse.

Y, por último, si desea obtener 0s y 1s para cada bit en lugar de booleanos (estoy usando un byte para almacenar cada bit; con menos residuos, de una int):

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

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

Un listado de código sin explicación es menos útil que uno con una explicación. Considere agregar uno para que otros puedan aprender de este código. –

2

Me acabo de encontrar con un caso en que ...

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

... no dio 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é he recibido un valor incorrecto para esto y me desconcertado hasta que encontré otra forma en C# para convertir un INT a 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 lógico valor 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.

1

Me gustaría lograr en una sola 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 debajo instantánea:

enter image description here

El siguiente código funciona:

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

pero el código siguiente no compila:

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