Eine long-Variablen in zwei Teile spalten
-
Hey,
ich habe eine lonag-Variable und möchte den Wert in zwei Teile als Hexadezimalzahl ausgeben, wie kann ich die long-Variable teilen?
-
Durch shiften und maskieren der Bitfolge deines Wertes.
-
Am besten mit Bit-Operatoren:
long val; int hi=val>>16; int lo=val&0xFFFF;
-
oder so:
long x = 2348925ul; short a, b; a = ((short*)&x)[0]; b = ((short*)&x)[1];
-
@Stöffel: Bleiben wir doch lieber bei Lösungsansätzen, die vom ANSI-Standard unterstützt werden
-
CStoll schrieb:
@Stöffel: Bleiben wir doch lieber bei Lösungsansätzen, die vom ANSI-Standard unterstützt werden
Könntest du mich aufklären, was daran nicht standardgemäss ist? Ist es das Problem das short und long gleich gross sein könnten?
-
Das und die Tatsache, daß dein Typ-Cast irgendwo im Bereich "implementation-defined behaviour" angesiedelt ist.
(außerdem müsstest du raten, welcher der Werte a und b nun die obere Hälfte des eingegebenen long-Wertes ist ;))
-
Danke, hab es schon hinbekommen. Trotzdem danke.
-
CStoll schrieb:
Am besten mit Bit-Operatoren:
long val; int hi=val>>16; int lo=val&0xFFFF;
Das wird so aber nicht korrekt funktionieren, da signed Shiften implementationsspezifisch ist. Und idR implementieren Compiler signed Shiften arithmetisch. Lösung: val vorher in unsigned long umwandeln.