char arry zu unit_16t

Gast #4386149
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? Mache ich da den (uint16_t)byte[0]-Cast immer
> unnötigerwese hin?

C garantiert das alle Operationen mindestens mit int-Wortbreite 
ablaufen, beim avr also 16 bit. Passt also.


da1l6
#4386207
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
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

Eine eigene Frage? Dieser Thread ist über 10 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.