Wie verwenden von high-und low-Byte?
Ich versuche zu repräsentieren 32768 mit 2 bytes. Für das high-byte, verwende ich die gleichen Werte wie das low-byte und interpretiert Sie anders oder muss ich die tatsächlichen Werte? So würde ich etwas wie
32678 0 oder 256 0? Oder keins von beidem? Jede Hilfe ist willkommen.
Was versuchen Sie zu tun? Ein unsigned short ist 16-bit in c++, und speichern die zahlen bis 32767.
hi = v >> 8; lo = v & 0xFF;
Hausaufgaben, eh? 🙂 Schau mal hier: en.wikipedia.org/wiki/Binary_numeral_system Bytes sind nichts anderes als Gruppen von acht bits.
Ich bin versucht, senden Sie eine iRobot Erstellen Sie einen Befehl, geradeaus zu fahren. Es sagt den Wert "32768 oder 32767" wird es fahren Sie geradeaus. Es dauert in ein high-byte und low-byte. Die beste, die ich bekommen haben (im Sinne von fahren) 255 128, aber noch drehte einige.
Bantegui Ein signed short speichert zahlen bis 32767, unsigned short geht bis 65535.
hi = v >> 8; lo = v & 0xFF;
Hausaufgaben, eh? 🙂 Schau mal hier: en.wikipedia.org/wiki/Binary_numeral_system Bytes sind nichts anderes als Gruppen von acht bits.
Ich bin versucht, senden Sie eine iRobot Erstellen Sie einen Befehl, geradeaus zu fahren. Es sagt den Wert "32768 oder 32767" wird es fahren Sie geradeaus. Es dauert in ein high-byte und low-byte. Die beste, die ich bekommen haben (im Sinne von fahren) 255 128, aber noch drehte einige.
Bantegui Ein signed short speichert zahlen bis 32767, unsigned short geht bis 65535.
InformationsquelleAutor Sterling | 2011-05-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
In hexadezimal, Ihre Zahl ist 0 x 8000, das ist 0x80 und 0x00.
Um das low-byte von der Eingabe, verwenden Sie
low=input & 0xff
und Holen Sie sich das high-byte verwendenhigh=(input>>8) & 0xff
.Holen Sie sich die Eingabe wieder aus dem low-und high-byes etwa so:
input=low | (high<<8)
.Stellen Sie sicher, dass die integer-Typen, die Sie verwenden, sind groß genug, um speichern Sie diese zahlen. Auf 16-bit-Systemen
unsigned int
/short
odersigned
/unsigned long
sollte groß genug sein.unsigned short
. In der Regel besser zu verwendenunsigned
Typen mit der>>
Betreiber.Nur weil zwei bytes beteiligt sind, ist es klug anzunehmen, dass die 16-bit-Grenze wird nicht gebrochen werden. Generell aber, bit-shift Operatoren funktionieren nur mit
signed
ganzen zahlen und zur Wahl gehen unsigned sollten mehr zu tun haben, ob, oder ob nicht negative Werte erforderlich sind.short
ist groß genug, dass 32768 überlauf kann auf -32768 undint
kann die gleiche Größe wieshort
. So ist der Wert32768 >> 8
wird durch die Implementierung festgelegt.Tatsächlich, dieses Gespräch ist irrelevant. Ich habe gerade bemerkt, dass die Frage gekennzeichnet ist 16-bit. Die Aktualisierung meiner Antwort entsprechend...
InformationsquelleAutor John McFarlane
Byte kann nur die Werte von 0 bis 255 (einschließlich). 32768 ist 0x8000, also das high-byte ist 128 und das low-byte ist 0.
Fair genug. Aber ich glaube, ich könnte die Anzahl von modernen Systemen, dass ein byte definiert als etwas anderes als 8 bits auf der einen Seite.
true true. Ich denke, in der Praxis oft keine Rolle, aber ich denke, man sollte den Unterschied kennen. Und da die Frage des OP ist ein sehr basic, ich denke, es wäre es Wert zu erwähnen, dass bei einer Antwort.
InformationsquelleAutor Ignacio Vazquez-Abrams
32768 0x8000, so würde man 0x80 (128) in Ihrer high-byte und " 0 " in das low-byte.
Das ist vorausgesetzt, vorzeichenlose Werte, natürlich. 32768 ist nicht wirklich ein Gültiger Wert für eine signierte 16-bit-Wert.
InformationsquelleAutor Alnitak
32768 hex-0080 ist auf einem little-endian-Plattform. Die "hohe" (zweite in unserem Fall) byte enthält, 128, und die "niedrige" eine 0.
InformationsquelleAutor azyoot
Versuchen, diese Funktion.
Übergeben Sie Ihre Hi_Byte und Lo_Byte, um die Funktion, es gibt den Wert als Wort.
InformationsquelleAutor Ernesto A. Garrote
Zeiger können dies leicht tun, sind VIEL SCHNELLER als Verschiebungen und benötigt keine Prozessor-math.
Überprüfen Sie diese Antwort
ABER:
Wenn ich Verstand Ihr problem, Sie müssen bis zu 32768 gespeichert in 2 bytes, also müssen Sie 2 unsigned int ist, oder 1 unsigned long.
Ändern Sie einfach die int für long und char für int, und Ihr gut zu gehen.
InformationsquelleAutor cyberponk