char arry zu unit_16t

#4386207
Lesenswert?

Lothar M. schrieb:
> Karl H. schrieb:
>> byte[0] << 8
> Ist das, wenn byte ein char ist, nicht immer 0?
> Oder erweitert das der Compiler diesen char gleich auf den
> Ergebnisdatentyp?


Nicht 'Ergebnisdatentyp'.
Wie die rechte Seite einer Zuweisung ausgewertet wird, hängt prinzipiell 
erst mal nicht davon ab, was links steht. Rechts steht eine Expression 
und die wird nach den Regeln umgesetzt.
Eine davon ist: Gerechnet wird nie kleiner als int.
(int war schon immer der Leib und Magen Datentyp in C)

Der Datentyp links ist allerdings nicht ganz unerheblich, wenn es zu 
Optimierungen kommt. Denn der Compiler kann den rechten Ausdruck auch 
wieder von int auf eine 8 Bit Berechnung zurückstutzen, wenn 
nachgewiesen werden kann, dass das für das Ergebnis keinen Unterschied 
macht. Steht links ein 8 Bit Datentyp, dann geht das natürlich bei 
einigen Operationen in der Expression recht einfach zu zeigen.

> Mache ich da den (uint16_t)byte[0]-Cast immer
> unnötigerwese hin?

unnötig würde ich nicht unbedingt sagen.
Aber notwendig um die Auswertung auf 16 Bit zu hieven ist er nicht. Denn 
das ist sie sowieso.
Gast #4386312
Lesenswert?

Wenn es um die "Weiterverarbeitung" geht, würde ich das mit einer Union 
machen.

union {
   char byte[2];
   uint16_t word;
}

Auch fürs "Rauskopieren" ist das in C wohl die effektivste Variante. 
Wegen little/big endian kennen ich mich auf den AVRs nicht aus, die 
Reihenfolge könnte ev. verkehrt sein.

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