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

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.