2014-02-07 8 views
9

Ich habe diese Art von CodeKonvertieren von Byte-Array auf INT

static void Main(string[] args) 
{ 
    byte[] array = new byte[2] { 0x00, 0x1f }; 
    Console.WriteLine(BitConverter.ToInt32(array, 0)); 
} 

aber es funktioniert nicht. Es löst eine Ausnahme aus:

Ziel-Array ist nicht lang genug, um alle Elemente in der Sammlung zu kopieren. Überprüfen Sie den Array-Index und die Länge.

Was ist los?

+0

Bitkonverter. ** ToInt32 ** –

Antwort

11

Wie der Name schon sagt, ein Int32 32 Bits oder 4 Bytes, also wenn Sie ein Byte-Array zu einem Int32 konvertieren wollen, braucht es eine Länge von mindestens 4 haben, (oder genauer gesagt, es braucht um mindestens 4 Bytes nach der Startposition zu haben).

Wenn Sie nur zwei Bytes haben, sollten Sie vielleicht ToInt16 verwenden?

4

Die documentation auf BitConverter.ToInt32 sagt:

ToInt32 Die Methode, um den Bytes aus dem Index zu startstart + 3 zu einem Int32 Wert umwandelt.

Sie müssen mindestens 4 Bytes angeben, aber Sie haben nur 2.

5

Ein Int32 von 4 Bytes zusammengesetzt ist, aber das Array hat nur 2. Eine Möglichkeit, dies zu umgehen ist es, zuerst zu konvertieren Int16 und dann zu Int32

Console.WriteLine((Int32)(BitConverter.ToInt16(array, 0))); 

Beachten Sie, dass in diesem spezifischen Nutzung Int32 von Int16 Umwandlung nicht alles ändern, weil die Zahlen die gleiche drucken.

+0

So wie das Schreiben der Dezimalzahl "10" als "0010" auch nichts anderes ändert: die zusätzlichen Nullen sind bedeutungslos, und Sie machen mehr oder weniger dasselbe, wenn Sie ein Int16 in ein konvertieren Int32. – Andrejovich