aufteilung in high und low!
-
Hi zusammen!
Muß gerade ein pascal programm in vc++ umschreiben und habe folgendes problem:
mit
(hi(liZahl)); (lo(liZahl));wird "liZahl" anscheinend in den high und low-anteil aufgeteilt.
liZahl ist ein long int.Meine Frage ist jetzt: Wie mach ich genau das in c++?
Danke im voraus!
-
Da musst du in C(++) immer gut aufpassen, da den Typen keine feste Groesse zugewiesen ist. Auf einer 64bit-Architektur ist ein long int afaik gleich lang wie ein int.
typedef uint64 ...; typedef uint32 ...; uint64 zahl = ...; //fuer big endian, fuer low einfach vertauschen uint32 low = *reinterpret_cast<uint32*>(&zahl); uint32 high = *(reinterpret_cast<uint32*>(&zahl) + 1);
-
LOWORD und HIWORD aus der WinAPI, sollte auch mit int gut funtkionieren. Musst aber nachschauen mit welchem Typ die definiert sind.
MfG SideWinder
-
Thomas (: schrieb:
Da musst du in C(++) immer gut aufpassen, da den Typen keine feste Groesse zugewiesen ist. Auf einer 64bit-Architektur ist ein long int afaik gleich lang wie ein int.
typedef uint64 ...; typedef uint32 ...; uint64 zahl = ...; //fuer big endian, fuer low einfach vertauschen uint32 low = *reinterpret_cast<uint32*>(&zahl); uint32 high = *(reinterpret_cast<uint32*>(&zahl) + 1);Äääähm ok, nur um zu gucken ob ich`s richtig verstanden habe:
short int low = *reinterpret_cast<uint32*>(&zahl); short int high = *(reinterpret_cast<uint32*>(&zahl) + 1);Wäre das korrekt?

-
Thomas (: schrieb:
Auf einer 64bit-Architektur ist ein long int afaik gleich lang wie ein int.
Kommt ganz darauf an, welches Datenmodell genutzt wird. Bei LLP64 wäre dies zB so, bei LP64 zB nicht.
-
Habe es gelöst und zwar folgendermaßen:
short int lo_wert = wert & 0x00ff; short int hi_wert = (wert & 0xff00) >> 8;Nur falls es jemanden interessiert, funktioniert auf jeden Fall

-
Naja, wenn du ein 2-Byte short in zwei 1-Byte Teile zerlegen willst, klappt das richtig. Ansonsten müsstest du die Werte etwas anpassen:
int val = ...; short lo = val & 0xFFFF; short hi = (val>>16) & 0xFFFF;