Gast
#665655
Hallo, kann mir jemand bei der Berechnung von High und Lowbyte helfen ? Ich müßte die Zahl 12288 zerlegen. Wie mach ich das ? Und was ist ein MSB, und wie setze ich das auf 1 ? Bitte um Hilfe Danke
|
Anzeige
|
High und Low Byte
Gast
#665655
Hallo, kann mir jemand bei der Berechnung von High und Lowbyte helfen ? Ich müßte die Zahl 12288 zerlegen. Wie mach ich das ? Und was ist ein MSB, und wie setze ich das auf 1 ? Bitte um Hilfe Danke 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 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 ... > uint16t two_bytes |= (1 << 16);
Das MSB eines 16 bit Wortes wäre 1 << 15 ;)
Gruß,
Dominic
Gast
#665666
Ich mache das ganze in Bascom, und brauche 2 werte die ich übertragen kann.
Gast
#665668
Währe dann das highbyte 48 und das lowbyte 0 ?
Gast
#665672
ja, stimmt
Gast
#665674
Und wie beckomme ich das msb mit aif 1 ?
Gast
#665676
Also, 48 ist binär 110000. wenn das msb der oberste wert ist, müßte es doch 1011000 sein, also 176.......oder ? 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
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 |
Anzeige
|