Konvertieren von 2 bytes zu einer Zahl
Ich habe ein Steuerelement, das einen byte-array.
Jedes jetzt und dann gibt es zwei bytes, die sagen mir einige info über die Anzahl der zukünftigen Elemente im array.
Also als Beispiel hätte ich:
... ... Item [4] = 7 Item [5] = 0 ... ...
Den Wert dieser übersichtlichen 7.
Aber was ist das?
... ... Item [4] = 0 Item [5] = 7 ... ...
Jede Idee, was das entspricht (wie ein normaler int)?
Ging ich auf binäre und dachte, es kann sein, 11100000000 entspricht 1792. Aber ich weiß nicht, ob das ist, wie es wirklich funktioniert (ie tut es der ganze 8 Artikel für die byte).
Gibt es eine Möglichkeit zu wissen dies mit testen?
Hinweis: ich bin mit C# 3.0 und visual studio 2008
Es klingt wie Sie sind Fragen Sie uns, um reverse-Engineering einige der serialisierten Daten. Das wird schwierig sein. Du könntest zumindest schreiben einige Beispiele für das komplette byte-array und was es entspricht, für drei oder vier einfache Beispiele. Aber warum willst du dieses wissen überhaupt? Welches problem versuchst du zu lösen?
Ich bin zu versuchen zu entziffern, das byte-array zurückgegeben, mit der Unterschrift Kontrolle in der OpenNETCF Kontrolle, so dass ich um 180 Grad drehen. Sehen Sie, diese Frage stackoverflow.com/questions/2657388/... für weitere details.
Ich bin zu versuchen zu entziffern, das byte-array zurückgegeben, mit der Unterschrift Kontrolle in der OpenNETCF Kontrolle, so dass ich um 180 Grad drehen. Sehen Sie, diese Frage stackoverflow.com/questions/2657388/... für weitere details.
InformationsquelleAutor Vaccano | 2010-04-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
BitConverter
können leicht umwandeln die beiden bytes in eine zwei-byte-integer-Wert:Das setzt Voraus, dass das MSB die binäre Darstellung dieser beiden bytes ist das Vorzeichen-bit (1 = -ve, 0 = +ve). Wenn das nicht der Fall, dh. wenn die Zahl ohne Vorzeichen, dann müssen Sie diesen verwenden. ushort Zahl = BitConverter.ToUInt16(Item 4). Beachten Sie auch, dass, wird byte für byte-index 5 als das erste byte (most significant byte), wenn Ihre Architektur ist little endian. Lesen reinventingthewheel.azurewebsites.net/TwosComplementTut.aspx für mehr Informationen auf das Vorzeichen-bit.
InformationsquelleAutor MusiGenesis
Einen zwei-byte-Zahl hat ein low-und ein high-byte. Das high-byte ist der Wert 256 mal so viel wie die low-byte:
So, für hohe=0 und low=7 den Wert 7. Aber für high=7 und low=0, der Wert wird 1792.
Dieser selbstverständlich davon aus, dass die Zahl ist eine einfache 16-bit-Ganzzahl. Wenn es etwas schicker mag, die oben nicht genug sein. Dann brauchst du mehr Kenntnisse darüber, wie die Nummer ist verschlüsselt, um zu entschlüsseln.
Die Reihenfolge, in der die high-und low-bytes angezeigt wird, wird bestimmt durch die endianness der byte-stream. In big-endian-sehen Sie high vor low (bei einer niedrigeren Adresse), die in little-endian ist es genau anders herum.
(high << 8) | low
InformationsquelleAutor unwind
Sagen Sie: "dieser Wert liegt deutlich 7", aber es hängt ganz von der Codierung. Wenn wir davon ausgehen, in voller Breite der bytes, dann in little-endian, ja; 7, 0 7. Aber in big-endian ist es nicht.
Für little-endian, was Sie wollen, ist
und für big-endian:
Aber auch andere encoding-Schemata verfügbar sind; zum Beispiel, einige Systeme verwenden eine 7-bit-Arithmetik, die in der 8-bit-als Fortsetzung bit. Manche Programme (UTF-8) setzen Sie alle die Fortsetzung bits im ersten byte (also das erste hat nur begrenzt Platz für Daten bit) und 8 bit für den rest in der Sequenz.
InformationsquelleAutor Marc Gravell
Wenn Sie wollen einfach nur, um diese zwei bytes, die nebeneinander in das binäre format, und sehen, was diese grosse Zahl ist in dezimal, dann müssen Sie diesen code verwenden:
Wenn Sie
short num = BitConverter.ToInt16(Item, 4);
gesehen, die akzeptierten Antworten, Sie sind unter der Annahme, dass das erste bit der beiden bytes ist das Vorzeichen-bit (1 = negativ und 0 = positiv). Die Antwort wird auch davon ausgegangen, Sie verwenden ein big endian system. Sehen diese für mehr info auf das Vorzeichen-bit.InformationsquelleAutor Backwards_Dave
Wenn diese bytes sind die "Teile" einer ganzzahligen es so funktioniert. Aber Vorsicht, dass die Reihenfolge der bytes ist Plattform-spezifisch ist, und dass es hängt auch von der Länge der Ganzzahl (16 bit=2 bytes 32 bit=4bytes, ...)
InformationsquelleAutor Danvil
Im Falle, dass das item[5] für den MSB
ushort Ergebnis = BitConverter.ToUInt16(new byte[2] { Artikel[5], Element[4] }, 0);
int Ergebnis = 256 * Element[5] + Pos[4];
InformationsquelleAutor Amir Twito