> das Problem scheint was mit dem Shift zu sein.
Das Problem ust vielmehr, dass du, Horst, dir endlich
mal ein vernünftiges Buch über C reinziehen solltest,
anstatt durch 'Try und Error' deine C-Kenntnisse
zu erweitern.
Beide Probleme, die du hier ansprichst sind nun wahrlich
alte Hüte in C.
> Dies:
>
1 | > temp = ((uint32_t)*array++) + (((uint32_t)*array++)<<8) + (((uint32_t) *array++)<<16) + (((uint32_t)*array)<<24);
|
2 | >
|
> funktioniert nicht, da der Compiler die "++" wohl nicht hinternander
> ausführt,
Dies funktioniert sehr wohl, aber nicht so wie du das erwartest.
Der Punkt ist: Mit einer Anweisung wie der da, kann der Compiler
machen was er will. Diese Anweisung hat auf jeden Fall undefiniertes
Verhalten, und es wird vom C-Sprachstandard keinerlei bestimmtes
Verhalten gefordert. Kurz gesagt: Eine Variable darf in einem
Ausdruck nur einmal einen neuen Wert bekommen. Dein Ausdruck
versucht aber in ein und demselben Ausdruck array 4-mal einen
neuen Wert zuzuweisen -> undefiniertes Verhalten. Alles mögliche
kann passieren.
Und das arithmetische Berechnungen immer im Zahlenbereich int
stattfinden (es sei denn einer der beteiligten Operanden hat
einen höheren Datentyp), sollte sich auch schon rumgesprochen
haben. Dabei ist es dem Compiler sche...egal, welchen Datentyp
die Variable hat, dem das Ergebnis zugewiesen wird. Während
der Berechnung des Ausdrucks gelten nur die Datentypen die
innerhalb des Ausdrucks vorkommen. Erst nachdem das Ergebnis
berechnet wurde, erfolgt die Anpassung auf die Zielvariable.