2016-12-08 6 views
1

Kann jemand den Unterschied in C# zwischen einem 'Byte' und 'Byte []' erklären? Meine Verwirrung ist, warum ich kein einzelnes Byte-Element aus dem byte [] -Array in eine Variable, die als Typ "Byte" definiert ist, zuweisen kann.Konvertieren von Byte [] in Byte

Zum Beispiel funktioniert das:

byte binSize; 
binSize = br.ReadByte(); 

Aber dies nicht:

byte binSize1; 
binSize1 = br.ReadBytes(1); 

Ich habe an der Microsoft Binary Reader class sah und ich sehe, dass das erste Beispiel ein einzelnes Byte zurückgibt und die zweite Gibt ein Array von Bytes zurück. Ich verstehe es. Aber gibt es eine einfache Möglichkeit, das gelesene einzelne Byte durch 'ReadBytes' zu konvertieren und so zu transformieren, dass es in einer 'Byte'-Variablen gespeichert werden kann?

Dies ist ein Problem, wenn ich das, was ich lese, in eine ganze Zahl konvertieren soll. Nur die Zeile mit 'binSize' unten funktioniert, die Zeile mit 'binSize1' nicht.

txt.Text = BitConverter.ToInt16(binSize, 0).ToString(); 
txt.Text = BitConverter.ToInt16(binSize1, 0).ToString(); 

Der Fehler, den ich mit der zweiten Zeile erhalten, ist byte [] 'auf 'byte'

+3

'br.ReadBytes (1) [0];' –

+0

Es dauert zwei Bytes, um ein int16 darzustellen. Sind Sie sicher, dass Sie ein einzelnes Byte konvertieren müssen? –

+0

Der Rückgabetyp der Funktion 'ReadBytes (int n)' ist auf 'byte []' festgelegt, selbst wenn 'n = 1' wird ein 1-Byte-Elementarray zurückgegeben.Es ändert seinen Rückgabewerttyp basierend auf der Eingabe "n" nicht. Einfach das erste Element des Arrays deaktivieren, um dieses Byte zu erhalten. –

Antwort

1

Kann jemand erklären den Unterschied in C# zwischen einem byte und byte[] ‚Typ nicht konvertieren kann'?

Die Differenz ist die gleiche wie zwischen TT[] und mit allen anderen Typen: T ein einzelnes Element ist, während T[] ein Array ist.

gibt es eine einfache Möglichkeit, das einzelne Byte eingelesen von ReadBytes() und wirft es zu konvertieren, so dass es in einer byte Variablen gespeichert werden?

Wenn Sie wissen, dass eine Funktion ein Array zurückgibt mit genau einem Byte, gelten [0] seinen Rückgabewert:

binSize1 = br.ReadBytes(1)[0]; 

Beachten Sie, dass dieser Ansatz nicht sicher ist, weil Sie nicht sicher wissen, dass Sie br.ReadBytes(1) hat mindestens ein Byte. Es ist besser, einen separaten Check zu tun:

var bytes = br.ReadBytes(1); 
if (bytes.Length == 1) { 
    var binSize1 = bytes[0]; 
} 
+1

Danke dasblinkenlicht. Ich verstand konzeptionell den Unterschied zwischen dem einzelnen Byte und dem Array von Bytes. Was ich herausfinden wollte, war, wie man ein einzelnes Byte vom Array in ein 'Byte' bringen konnte. Der Schlüssel, den ich vermisste, war das '[0]' am Ende der ReadBytes (1). – milnuts

0

Wenn Sie eine Sammlung von Bytes haben, können Sie natürlich speichern Sie es nicht in ein einziges Byte. Sie können jedoch speichern einen bestimmten Punkt dieser Sammlung, sagen wir, die erste:

byte myByte = byteArray[0]; 

oder ohne Array

byte myByte = byteCollection.First(); 

Natürlich sollten Sie wahrscheinlich sicherstellen, dass es ist ein erster bevor Sie versuchen, es zu greifen. Die Length Eigenschaft von Arrays ist ein guter Anfang.