web-dev-qa-db-ger.com

Wie werden hohe und niedrige Bytes verwendet?

Ich versuche, 32768 mit 2 Bytes darzustellen. Verwende ich für das High-Byte die gleichen Werte wie für das Low-Byte und interpretiere sie anders oder setze ich die tatsächlichen Werte? Würde ich also so etwas wie 32678 0 oder 256 0 setzen? Oder keiner von denen? Jede Hilfe wird geschätzt.

13
Sterling

In Hexadezimal ist Ihre Nummer 0x8000, also 0x80 und 0x00. Um das Low-Byte aus der Eingabe zu erhalten, verwenden Sie low=input & 0xff und um das High-Byte zu erhalten, verwenden Sie high=(input>>8) & 0xff

Holen Sie sich die Eingabe von den tiefen und hohen Byes wie folgt: input=low | (high<<8)

Stellen Sie sicher, dass die verwendeten Integer-Typen groß genug sind, um diese Zahlen zu speichern. Auf 16-Bit-Systemen sollte unsigned int/short oder signed/unsigned long groß genug sein.

18
John McFarlane

Bytes dürfen nur Werte zwischen 0 und 255 enthalten. 32768 ist 0x8000, daher ist das High-Byte 128 und das Low-Byte 0.

32768 ist 0x8000, also würden Sie 0x80 (128) in Ihr High-Byte und 0 in Ihr Low-Byte setzen.

Das setzt natürlich vorzeichenlose Werte voraus. 32768 ist eigentlich kein zulässiger Wert für einen signierten 16-Bit-Wert.

0
Alnitak

32768 in hex ist 0080 auf einer Little-Endian-Plattform. Das "High" -Byte (in unserem Fall das zweite) enthält 128 und das "Low" eine 0.

0
azyoot

Zeiger können dies leicht tun, sind VIEL SCHNELLER als Schichten und erfordern keine Prozessor-Mathematik.

Überprüfe diese Antwort

ABER: Wenn ich Ihr Problem verstanden habe, benötigen Sie bis zu 32768 in 2 Bytes, also 2 vorzeichenlose Int oder 1 vorzeichenlose Länge. Ändere einfach int lang und char für int, und dein gutes zu gehen.

0
cyberponk

Versuchen Sie diese Funktion. Übergeben Sie Hi_Byte und Lo_Byte an die Funktion. Sie gibt den Wert als Word zurück.

Word MAKE_Word( const BYTE Byte_hi, const BYTE Byte_lo)
{
     return   (( Byte_hi << 8  ) | Byte_lo & 0x00FF );
}
0