Domanda

Attualmente sto leggendo un file e volevo essere in grado di convertire l'array di byte ottenuti dal file in una breve serie.

Come potrei fare per fare questo?

È stato utile?

Soluzione

Una possibilità sta usando Enumerable.Select :

byte[] bytes;
var shorts = bytes.Select(b => (short)b).ToArray();

Un altro è quello di utilizzare Array.ConvertAll :

byte[] bytes;
var shorts = Array.ConvertAll(bytes, b => (short)b);

Altri suggerimenti

Buffer.BlockCopy .

Crea breve serie alla metà della dimensione della matrice di byte, e copiare i dati di byte in:

short[] sdata = new short[(int)Math.Ceiling(data.Length / 2)];
Buffer.BlockCopy(data, 0, sdata, 0, data.Length);

E 'il metodo più veloce di gran lunga.

Uno shorthard è un composto di due byte. Se si sta scrivendo tutti i pantaloncini per il file come veri e propri cortometraggi poi quelle conversioni sono sbagliate. È necessario utilizzare due byte per ottenere il vero valore breve, usando qualcosa come:

short s = (short)(bytes[0] | (bytes[1] << 8))
short value = BitConverter.ToInt16(bytes, index);
 short[] wordArray = Array.ConvertAll(byteArray, (b) => (short)b);

Non so, ma mi sarei aspettato un altro aproach a questa domanda. Quando si converte una sequenza di byte in una sequenza di corti, avrei fatto lo ha fatto come @Peter

short s = (short)(bytes[0] | (bytes[1] << 8))

o

short s = (short)((bytes[0] << 8) | bytes[1])

a seconda endianess dei byte del file.

Ma il non ha ancora OP menzionare il suo utilizzo dei pantaloncini o la definizione dei cortometraggi nel file. Nel suo caso non avrebbe alcun senso per convertire la matrice di byte a una breve serie, perché ci vorrebbe il doppio della memoria, e dubito che sarebbe necessario un byte per essere convertito in un breve se usato altrove.

byte[] bytes;
var shorts = bytes.Select(n => System.Convert.ToInt16(n)).ToArray();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top