Frage zu LOWORD
-
Hallo
Was ist LOWORD ?
Laut MSDN: Retrieves the low-order word from the specified value.
Gibt das low-order word von einem spezifizierten Wert zurück. ( Was soll ich mir darunter vorstellen ) o_Ohttp://msdn.microsoft.com/en-us/library/ms632659(VS.85).aspx
-
Wenn du einen 32 Bit Wert hast, dann gibt dir LOWORD die niederwertigen 16 Bit zurück (HIWORD eben den Rest).
`
int doppelwort=0xAFFE;
short lo=LOWORD(doppelwort); //ist 0xFE
short hi=HIWORD(doppelwort); //ist 0xAF
`
Schau dir einfach die Definitionen der Makros an und rechne sie vielleicht mal kurz per Hand durch, dann ist dir das ganz schnell klar.
-
Ein DWORD lässt sich auch in 2 WORDS aufspalten. Das brauchst du dann, wenn du mit 1 Variable 2 Werte übergeben willst. Unter Windows ist das bei der Window Procedure, welche sämtliche Nachrichten erhält üblich. Diese hat dann 2 Parameter: WPARAM und LPARAM. LPARAM ist ein DWORD. So wird z.B. bei WM_SIZE in lparam die neue Größe des Fensters abgelegt (Höhe und Breite).
int width, height; width=LOWORD(lparam); height=HIWORD(lparam);
-
_matze schrieb:
Wenn du einen 32 Bit Wert hast, dann gibt dir LOWORD die niederwertigen 16 Bit zurück (HIWORD eben den Rest).
int doppelwort=0xAFFE; short lo=LOWORD(doppelwort); //ist 0xFE short hi=HIWORD(doppelwort); //ist 0xAFSchau dir einfach die Definitionen der Makros an und rechne sie vielleicht mal kurz per Hand durch, dann ist dir das ganz schnell klar.
Das ist falsch. Was Du hier beschreibst ist LOBYTE und HIBYTE! Dein Beispiel würde für lo und hi den gleichen Wert ergeben.
Korrekt ist:int doppelwort=0xBAFFAFFE; short lo=LOWORD(doppelwort); //ist 0xAFFE short hi=HIWORD(doppelwort); //ist 0xBAFF
-
Martin Richter schrieb:
_matze schrieb:
Wenn du einen 32 Bit Wert hast, dann gibt dir LOWORD die niederwertigen 16 Bit zurück (HIWORD eben den Rest).
int doppelwort=0xAFFE; short lo=LOWORD(doppelwort); //ist 0xFE short hi=HIWORD(doppelwort); //ist 0xAFSchau dir einfach die Definitionen der Makros an und rechne sie vielleicht mal kurz per Hand durch, dann ist dir das ganz schnell klar.
Das ist falsch. Was Du hier beschreibst ist LOBYTE und HIBYTE! Dein Beispiel würde für lo und hi den gleichen Wert ergeben.
Korrekt ist:int doppelwort=0xBAFFAFFE; short lo=LOWORD(doppelwort); //ist 0xAFFE short hi=HIWORD(doppelwort); //ist 0xBAFFUpps! Klar, hast Recht...
-
Hallo
In der windef.h steht:
#define LOWORD(l) ( (WORD)((DWORD_PTR) (l) & 0xffff))
Also ich weiss:
1 Word = 2 Byte
1 DWORD = 4 Byte
Aber was soll DWORD_PTR sein ?
Ich kenne von Assembler zwar sowas z.b:
MOV DWORD PTR DS:[5C2FBC],8
Aber was genau ist das jetzt in C++ ?
und was soll das (1) und wieso wird das dann mit 0xffff verodert.Also mir sagt das gar nix.

-
Verundet, nicht verodert!
0xDEADBEEF AND 0x0000FFFF -------------- 0x0000BEEF <= mit der Verundung kommst du an die niedrigen 2 Bytes ran und nullst den Rest
-
Ja verundet ist mir auch gerade aufgefallen.^^
Was ist das hier für ein Wert ?
0xDEADBEEF
-
var schrieb:
Ja verundet ist mir auch gerade aufgefallen.^^
Was ist das hier für ein Wert ?
0xDEADBEEF
Das ist dezimal 3735928559 und das entspricht haargenau der... nee Quatsch, ich mach nur Spaß. Das ist einfach eines der lustigen Wörter, die sich mit hexadezimalen Zahlen (A-F) abbilden lassen.

-
Sieh dir mal http://en.wikipedia.org/wiki/Magic_number_(programming)#Magic_debug_values an. Dort wird auch 0xDEADBEEF beschrieben.