High und Low Byte

Persönliche Seite #665658
Lesenswert?
• ▲
▼
Hi Andi,

Das High-Byte ist jenes Byte aus Deinem 16-Bit-Wert, das die 8 
hoechstwertigen Bits beinhaltet, das Low-Byte die 8 niederwertigsten. 
Das MSB ist das "most significant bit" also das hoechstwertige Bit in 
dem Wert.

Du bekommst die Werte heraus, indem Du sie maskierst:

uint16t two_bytes = 0x1234;
uint8t  high_byte = two_bytes & 0xff00;
uint8t  low_byte  = two_bytes & 0x00ff;

Um das MSB auf 1 zu setzen:

uint16t two_bytes |= (1 << 16);

Ob das niederwertigste Bit von links oder von rechts beginnt kann auf 
unterschiedlichen Architekturen unterschiedlich sein. Beginnt es links, 
also an der kleinsten Speicheradresse (wie z.B. auf jeder 
Intel-Architektur) spricht man von little endian, andernfalls von 
big-endian-Systemen.


Lieber Gruss,
Michael
#665659
Lesenswert?
• ▲
▼
andi wrote:
> Hallo, kann mir jemand bei der Berechnung von High und Lowbyte helfen ?
> Ich müßte die Zahl 12288 zerlegen. Wie mach ich das ?

So, wie Du Deine Zahl in 5 Ziffern (Wertebereich 0 bis 9) zerlegt hast, 
so kannst Du die Zahl auch in zwei Bytes (Wertebereich 0 bis 255) 
zerlegen.

> Und was ist ein
> MSB,

MSB = Most Significant Bit, also höchstwertigstes Bit.

> und wie setze ich das auf 1 ?

Durch VerOdeRn (OR).

>
> Bitte um Hilfe

Naja, das riecht wiedermal nach Hausaufgaben. Der Dumme macht sich 
selbst sachkundig, der Clevere lässt Andere für sich arbeiten indem er 
fragt...

>
> Danke

...
Persönliche Seite #665682
Lesenswert?
• ▲
▼
Dominic R. wrote:
>> uint16t two_bytes |= (1 << 16);
>
> Das MSB eines 16 bit Wortes wäre 1 << 15 ;)
>
> Gruß,
>
> Dominic

Ja... Dominic hat recht, verzeihe er mir den Fehler ;) Die 
Stellenwertigkeit des n-ten Bits ist natuerlich 2^(n-1)

Und Andi: So nen bisschen Grundlagen solltest Dir vielleicht anlesen. 
Die Beispiele in C lassen sich natuerlich auf jede andere Sprache 
uebertragen...
Gast #665703
Lesenswert?
• ▲
▼
MSB hat zwei Bedeutungen:
 - Most Significant Bit   z.B. bei serieller Datenübertragung
 - Most Significant Byte  z.B. bei der Zahlendarstellung in Rechner

Vermutlich ist gemeint, Du sollst das höchste Bit der Zahl setzen:
                  MSB
                   |
                   v
12288 = 0x3000 = 0b0011000000000000
45056 = 0xb000 = 0b1011000000000000

@Michael
"uint8t  high_byte = two_bytes & 0xff00;"

uint8t  high_byte = (two_bytes & 0xff00) >> 8;
oder gleich
uint8t  high_byte = two_bytes >> 8;

Einfacher ist es, eine Union zu definieren und auf das entsprechende 
Byte direkt zuzugreifen. Das ist allerdings nicht portabel und abhängig 
von der Rechnerarchitektur.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.