Convertire array di byte a breve array in C #
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?
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
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();