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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren