Umwandeln byte-array zu kurz-array in C#
Ich bin derzeit einer Datei zu Lesen und wollte werden in der Lage, konvertieren Sie das array von bytes erhalten Sie aus der Datei in ein short-array.
Wie würde ich gehen über das tun dies?
Tun Sie konvertieren möchten 1 byte 1 short, 2 bytes, 1 kurze?
InformationsquelleAutor williamtroup | 2009-07-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eine Möglichkeit ist die Verwendung
Enumerable.Wählen Sie aus
:Anderen ist die Verwendung
Array.ConvertAll
:Eine andere Möglichkeit wäre bytes.Cast<kurzen>().ToArray();
Tatsächlich, dies führt zu einer InvalidCastException. Die kurze Erklärung ist, dass dieser code implizit verursacht einen boxed byte werden ohne Verpackung auf eine kurze, die kein gültiges unboxing-operation. Für details, siehe stackoverflow.com/questions/445471/....
Wenn ich var shorts[] = Array.ConvertAll(Byte, b => (kurz)b); ich habe mich jedes byte umgewandelt zu einer kurzen, nicht jedes paar von bytes umgewandelt.
InformationsquelleAutor jason
Verwenden Puffer.BlockCopy.
Erstellen die kurz-array auf die Hälfte der Größe der byte-array und kopieren Sie die byte-Daten in:
Es ist die Schnellste Methode bei weitem.
Danke! Super Antwort, aber ich hatte den code zu ändern leicht zu: short[] sdata = new short[(int)Math.Decke(Daten.Länge / 2.0)];. Ansonsten würde ich bekommen den folgenden Fehler: "Der Aufruf ist mehrdeutig zwischen den folgenden Methoden oder Eigenschaften: 'Math.Ceiling(decimal)' und 'Math.Decke(Doppel -)' "
InformationsquelleAutor steppenwolfe
InformationsquelleAutor Gabriel
Einen shorthard ist eine Verbindung aus zwei bytes. Wenn Sie schreiben alle die shorts, um die Datei als true Hosen dann diese Umrechnungen sind falsch. Sie müssen die Verwendung von zwei bytes, um die wahre kurzen Wert, mit so etwas wie:
Vorausgesetzt, little endian, sollte dies: short s = (short)(bytes[0] | (bytes[1] << 8))
InformationsquelleAutor
InformationsquelleAutor Philippe Leybaert
Weiß ich nicht, aber ich hätte erwartet, dass eine andere Herangehensweise an diese Frage.
Bei der Konvertierung einer Folge von bytes in eine Folge von kurzen Hosen, ich hätte es getan, wie @Peter hast
oder
je nach endian Typ der bytes in der Datei.
Aber die OP nicht erwähnen, ist seine Verwendung von der Hose oder der definition der shorts in der Datei.
In seinem Fall würde es keinen Sinn machen, umwandeln byte-array in ein short-array, denn es würde doppelt so viel Speicher, und ich bezweifle, ob ein byte benötigt, um umgewandelt werden zu einer kurzen, wenn an anderer Stelle verwendet.
InformationsquelleAutor Wolfgang Roth
ja, es ist ineffizient. Ich denke, dass es sicherer, tho, dann Gießen.
Sicherer als casting? Ein cast von byte zu kurz ist und immer funktioniert. Es kann niemals eine exception werfen
InformationsquelleAutor Muad'Dib