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????
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 | wert_dec = ((uint32_t)data[2] << 24 | (uint32_t)data[3] << 16 | (uint32_t)data[4] << 8 | (uint32_t)data[5] << 0); |
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 !
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.
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.