Kaj G. schrieb:
> Jobst Q. schrieb:
>> Das Konvertieren zwischen unsigned und signed int macht man am besten
>> über eine union.
> Nein. Denn das bedeutet unterm Strich, dass du einen Member schreibst,
> aber einen anderen liest. Und dies ist undefiniertes Verhalten. Man darf
> nur den Member eines union lesen, welcher zu letzt geschrieben wurde.
Sind wir hier in einem schlechten Kindergarten, wo Regeln eingepaukt
werden, ohne sie zu verstehen?
union heißt, dass Variablen unterschiedlichen Typs auf demselben
Speicherplatz untergebracht werden. Oder andersherum, dass derselbe
Speicherinhalt als Variable unterschiedlichen Typs behandelt werden
kann. Da ist nichts am Verhalten undefiniert.
In diesem Fall ist es ja erwünscht, dass ein Integer mit Vorzeichen als
vorzeichenloser Typ behandelt wird, um ihn problemlos in einzelne Bytes
umzusetzen.
Wie würdest du das denn sonst machen?
Und wenn jetzt das Problem wäre, einen float-wert als einzelne Bytes zu
übertragen?
Mit einer union wäre das kein Problem. Eine andere Möglichkeit wäre über
einen gecasteten void-Pointer, aber Pointer sind ja auch nicht so
beliebt, außer bei denen, die damit umgehen können.