Bit-Shift Problem

OP #4073749
Lesenswert?
• ▲
▼
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 #4073778
Lesenswert?
• ▲
▼
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.
Gast #4073802
Lesenswert?
• ▲
▼
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.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren