¿Cómo convertir una matriz larga en una matriz de bytes?

Los datos provienen de fuera del programa, ya que la matriz larga debe convertirse en una matriz de bytes. ¿Cómo hacer eso de manera eficiente? Además, ¿hay alguna forma de seleccionar el tipo de conversión como Little Endian o Big Endian?

preguntado el 22 de mayo de 12 a las 16:05

¿Quieres decir que cada long en la matriz de origen debe convertirse en 8 bytes en la matriz de destino? (¿Y que el proceso de conversión debería ser capaz de manejar diferentes endian-ness?) -

@baraban.... ¿los datos son una matriz larga o solo larga? -

Dé un ejemplo inequívoco de una entrada dada y cuál sería su salida. -

1 Respuestas

Puedes hacer esto para convertir un long matriz a una byte formación:

bool isLittleEndian = true;
byte[] data = new byte[longData.Length * 8];
int offset = 0;
foreach (long value in longData) {
  byte[] buffer = BitConverter.GetBytes(value);
  if (BitConverter.IsLittleEndian != isLittleEndian) {
    Array.Reverse(buffer);
  }
  buffer.CopyTo(data, offset);
  offset += 8;
}

Esto suele ser lo suficientemente eficiente. Si necesita que sea más rápido, debe usar punteros en un bloque de código no seguro.

contestado el 22 de mayo de 12 a las 16:05

¿Cree que es posible usar memcpy no administrado en caso de que la matriz de entrada sea IsLittleEndian? ¿Hay alguna muestra de cómo hacer eso? - baraban

@baraban: si el estado de origen y destino es el mismo, puede usar una copia en bloque no administrada. - Guffa

@baraban: Sí, eso parece ser utilizable. - Guffa

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.