2012-06-20 21 views
12

Cómo convertir una matriz de bytes en una matriz int? Tengo una matriz de bytes que contiene 144 elementos y las formas en que lo he intentado son bastante ineficientes debido a mi inexperiencia. Lamento que esto haya sido respondido antes, pero no pude encontrar una buena respuesta en ningún lado.Cómo convertir una matriz de bytes en una matriz int?

+1

¿Cuáles son las formas que han intentado? – Marlon

+0

Solo para mencionar: el byte es de 8 bits, int es de 32 bits y está convirtiendo un byte en int. Todos los convertidos serán del 0 al 255. – Bakudan

Respuesta

22

simple:

//Where yourBytes is an initialized byte array. 
int[] bytesAsInts = yourBytes.Select(x => (int)x).ToArray(); 

Asegúrese de incluir System.Linq con una declaración using:

using System.Linq; 

Y si LINQ no es lo suyo, puede utilizar esto en su lugar:

int[] bytesAsInts = Array.ConvertAll(yourBytes, c => (int)c); 
+0

Recibí un error: 'byte []' no contiene una definición para 'Seleccionar' y ningún método de extensión 'Seleccionar' acepta un primer argumento de tipo 'byte []' podría encontrarse (¿falta una directiva using o una referencia de ensamblado?) – user1166981

+0

@ user1166981: asegúrese de hacer referencia a 'System.Linq' en su proyecto. (Por cierto, ¿a qué versión del framework .NET está apuntando?) – Ryan

+0

bien, eso quitó el error gracias – user1166981

4

Sé que esta es una publicación anterior, pero si buscabas en primer lugar obtener una matriz de enteros, ed en una matriz de bytes (y que podría estar considerando su matriz de bytes de 144 elementos), esta es una manera de hacerlo:

var size = bytes.Count()/sizeof (int); 
var ints = new int[size]; 
for (var index = 0; index < size; index++) 
{ 
    ints[index] = BitConverter.ToInt32(bytes, index * sizeof (int)); 
} 

Nota: cuidar el orden de bits, si es necesario. (Y en muchos casos lo hará)

+0

Nice, estaba buscando esto. La gente parece olvidar que (int) byteVar no es lo mismo que convertir un bytearray en un int (por ejemplo, 4 bytes para un int) – Sliver2009

+1

Hay una mejor solución: https://stackoverflow.com/a/5896716/238419 Eso la pregunta es sobre 'int []' a 'byte []' pero esta solución debería funcionar independientemente –

0

Ahora Es simple como sigue,

int[] result = Array.ConvertAll(bytesArray, Convert.ToInt32); 
Cuestiones relacionadas