ein integer in zwei short teilen
-
winner schrieb:
[...] wunderschönen makros LOWORD und HIWORD.
contradictio in adiecto

greetz, Swordfish
-
Swordfish schrieb:
contradictio in adiecto

genau, ich wollte ja noch "oxymoron" als user hinschreiben

-
am einfachsten wäre es mit einem short pointer.
short getUpper( long value ) { short * ptr = (short*) &value; ++ptr; return *ptr; } short getLower( long value ) { short * ptr = (short*) &value; return *ptr; }
-
plongor schrieb:
am einfachsten wäre es mit einem short pointer.
Wohl eher am unsichersten. Was, wenn ein
short4 Bytes breit ist?greetz, Swordfish
-
Gegenfrage, was ist wenn der Integer 33 Byte groß ist und gar nicht durch 2 teilbar ist?
-
Sch***egal, denn:
gerritgoetzen schrieb:
Laut Dokumentation stehen in den "höherwertigen 16 Bit die Hauptversion" und und in den anderen 16 Bit die Unterversion.
greetz, Swordfish
-
Ich meine eine Union wäre eine gute Lösung
union { unsigned int alles; unsigned short hälfte[2]; };
-
Ich meine eine Union wäre eine gute Lösung
union { unsigned int alles; unsigned short hälfte[2]; };
-
c++-er schrieb:
Ich meine eine Union wäre eine gute Lösung
Ist es aber nicht :p
-
plongor schrieb:
am einfachsten wäre es mit einem short pointer.
short getUpper( long value ) { short * ptr = (short*) &value; ++ptr; return *ptr; } short getLower( long value ) { short * ptr = (short*) &value; return *ptr; }undefiniert
c++-er schrieb:
Ich meine eine Union wäre eine gute Lösung
union { unsigned int alles; unsigned short hälfte[2]; };ebenfalls undefiniert
Natürlich muss die Repräsentation beider Typen entsprechend zueinander passen (also short: 16bit ohne padding, int: 32bit ohne Padding) - aber beide Verfahren (die auf das Gleiche hinauslaufen) haben dennoch aus dem gleichen Grunde (3.10/15) undefiniertes Verhalten.
-
Könnte mal jemand einen FAQ Beitrag dazu schreiben warum das undefiniert ist? Ich sehe das nämlich ziemlich oft das eine Union für sowas missbraucht wird.