我接触过C++程序中的一些怪异符号。我正在处理位移,并且遇到了LOWORD()和HIWORD()函数。我知道LOWORD是整数的低2个字节的值。我也知道HIWORD是该整数的高2个字节。但是,我接触了一个看起来像这样的代码段:

#define LOWORD(l)           ((WORD)(((DWORD_PTR)(l)) & 0xffff))
#define HIWORD(l)           ((WORD)((((DWORD_PTR)(l)) >> 16) & 0xffff))

int v1 = 0x12343460;
int v2 = 0x11111111;
HIWORD(v2) = HIWORD(v1);
LOWORD(v1) = LOWORD(v2);

从外观上看,程序员似乎建议将一个函数的值放入另一个函数。但是,如果没有一些严肃的程序员魔术,这似乎是不可能的。在解密此代码段方面的任何帮助将不胜感激。

最佳答案

要解决这个问题:

#define HIDWORD(dw, hw) LOWORD(dw) | (hw << 16)
#define LODWORD(dw, lw) (HIWORD(dw) << 16) | lw
-----------------------------------------------
v2 = HIDWORD(v2, HIWORD(v1));
v1 = LODWORD(v1, LOWORD(v2));

关于c++ - LOWORD和HIWORD操作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52435029/

10-09 00:09