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 schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|