【发布时间】:2019-02-25 08:24:16
【问题描述】:
我在 C++ 程序中接触过一些奇怪的符号。我正在处理位移,我遇到了 LOWORD() 和 HIWORD() 函数。我知道 LOWORD 是整数的低 2 个字节的值。我也知道 HIWORD 是该整数的高 2 个字节。然而,我接触到一个代码 sn-p,看起来像这样:
#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);
从外观上看,程序员似乎建议将一个函数的值放入另一个函数中。然而,如果没有一些严肃的程序员魔法,这似乎是不可能的。任何解密此代码 sn-p 的帮助将不胜感激。
【问题讨论】:
-
因为它们通常是在 Win32 API 中定义的,所以这不可能工作(可能除了
LOWORD一个,这要归功于左值转换非标准扩展)。如果你有不同的定义,你应该发布它们。 -
好的,如果您“了解”
LOWORD和HIWORD是什么,那么您的问题到底是什么?这里没有人知道LOWORD或HIWORD是什么,因为您的问题中没有显示这些神秘函数或宏的定义。你比读过这个问题的任何人都更了解他们。要回答这里唯一的实际问题,不,这段代码没有“任何意义”,因为没有显示HIWORD和LOWORD的工作原理,任何人在这里唯一能做的就是推测这些神秘的东西功能可能是。 -
投票关闭,因为缺乏可重复的例子。
-
您需要显示
HIWORD和LOWORD的定义。我们不会用英语编码 :-) -
@SeverinPappadeux,有种方法可以工作(请参阅我对其中一种的回答)。然而,就像用钝勺子挖出自己的心脏一样,这并不是一个好主意:-)
标签: c++ hex bit-shift arithmetic-expressions