2 unsigned short in einem signed long speichern?
-
Hi
Die Frage steht im Topic. Wie stell ich das am geschicksten an. Ich brauche das ganze um mit der libtiff mehrere long und short vectoren in einem custom Tag eines Tiffs zu speichern. Der Tag ist vom Typ long.
-
Geht nicht, ein long muss nicht doppelt so gross sein wie ein short.
-
undef schrieb:
Geht nicht, ein long muss nicht doppelt so gross sein wie ein short.
Und? Dann prüft man das eben zur Compilezeit.
Die geschickteste Version ist, einen der shorts um die Länge eines shorts nach links zu shiften, die beiden shorts dann zu verodern und im long zu speichern.
-
ich habs jetzt so gemacht:
union bla { short a[2]; long b; }; bla bl; bl.a[0] = 2; bl.a[1] = 3; long blub = bl.b;
-
Das war die Schlechteste aller Möglichkeiten.
-
kannst du auch sagen warum?
-
Weil es undefiniertes Verhalten erzeugt. Es funktioniert zwar häufig (bisher eigentlich immer), aber der Standard garantiert nur, dass nur der Wert gültig ist, der zuletzt beschrieben worden ist. Wenn der Compiler ein seltsames Speicherlayout für die Elemente der union benutzt kann das Ergebnis falsch sein.
Am besten benutzt du, wie bereits oben erwähnt, Byteshifting und Verorderung.