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.