Hallo, habe hier ein einfaches Problem jedoch komme ich nicht hinter die Lösung. ich habe ein Array "data" als uint8_t data[0] = 0x06 data[1] = 0x03 data[2] = 0x00 data[3] = 0x0E data[4] = 0x10 data[5] = 0x00 in data[2] bis data[5] befindet sich meine Zahl die ich als 32bit Wert empfange (0x000E1000 ergibt als dec 921600). Nun möchte ich diese 4 Hex Werte zu einer uint32_t Wandeln über Bitshift wie folgt: wert_dec = (data[2] << 24 | data[3] << 16 | data[4] << 8 | data[5] << 0); leider kommt hier immer 4096 als Ergebniss. Wo liegt das Problem????
Gast
#4073753
Mathias Feld schrieb: > data[2] << 24 data[2] ist uint_8. Überlege Dir was dann bei <<24 dabei rauskommt. Stichwort: casten rgds
@ Mathias Feld (savag) Eher so.
1 | |
6A66 schrieb: > Überlege Dir was dann bei <<24 dabei rauskommt. Hm, eigentlich sollte eine Zahl < 256 rauskommen. Also niemals 4096. Allerdings ist ein shift groesser als die Datentypbreite glaube ich undefiniert ? PS: Ich bezweifele nicht dass casten auf den Zieltyp richtig und noetig ist. Wundere mich nur ueber die 4096 !
SUUUPER Danke, das wars!!!
Gast
#4073778
Kai S. schrieb: > Hm, eigentlich sollte eine Zahl < 256 rauskommen. Also niemals 4096. > Allerdings ist ein shift groesser als die Datentypbreite glaube ich > undefiniert ? > > PS: Ich bezweifele nicht dass casten auf den Zieltyp richtig und noetig > ist. Wundere mich nur ueber die 4096 ! es wird alles mindestens mit int also 16bit gerechnet.
Kai S. schrieb: > Hm, eigentlich sollte eine Zahl < 256 rauskommen. Wahrscheinlich wird die Zahl zunaechst in einen (16bit) int gecastet. Dann liegt auch 4096 im Bereich des Moeglichen.
Gast
#4073802
Kai S. schrieb: > Allerdings ist ein shift groesser als die Datentypbreite glaube ich > undefiniert ? Ja, richtig. Kai S. schrieb: > Kai S. schrieb: >> Hm, eigentlich sollte eine Zahl < 256 rauskommen. > > Wahrscheinlich wird die Zahl zunaechst in einen (16bit) int gecastet. > Dann liegt auch 4096 im Bereich des Moeglichen. Mit Casts hat das nichts zu tun. Es nennt sich integer promotion.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.