gpt4 book ai didi

c++ - 分解 LPARAM 变量并查看位组

转载 作者:太空宇宙 更新时间:2023-11-04 14:57:19 24 4
gpt4 key购买 nike

我知道当我收到 WM_KEYDOWN 事件时,LPARAM 变量设置了某些位(在其内部)以识别长按键等信息。

所以我试图分解一个 LPARAM 变量并查看各个位值组和位组以及该值(例如查看第 16 到第 24 位以及来自该位的值)。

我的问题:我不知道如何查看单个位和位组?如何分解 LPARAM 变量并查看位值(以二进制、十六进制和十进制打印出来)。

到目前为止我已经有了这个,但是在位级别上工作让我很困惑,所以我不确定我是否真的在看十进制等的第 24、25 和第 16 位值。

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{

switch(msg)
{
case WM_KEYDOWN:
{
// I know that a LPARAM variable is a 32 bit(or is it byte?) long variable. How would I look at the
// 16th bit value? How would I look that the value from the 16th to the 24th bit?
printf("A: %d, %d, %d\n", lParam >> 24, lParam >> 25, lParam >> 16 );
}
break;

最佳答案

通常,您使用按位与来检查某个位是否已设置:

unsigned int flags;  // some flags

if (flags & 0x01) { } // bit 0 is set
if (flags & 0x02) { } // bit 1 is set
if (flags & 0x04) { } // bit 2 is set
...
if (flags & (1U << n)) { } // bit n is set

但是,不要依赖物理位值。相反,API 定义了描述标志含义的 USEFUL_CONSTANTS:

LPARAM flags = ApiFunction();
if (flags & USEFUL_CONSTANT) { } // check if the flag is set

查看相关消息的 API 文档以找出定义了哪些值。

更新:我发现在您的情况下,您可能实际上需要 而不仅仅是标志。因此,要获得最低 16 位的值,只需将值与相应的位掩码按位求和:unsigned int repeat_count = flags & 0xFFFF; 请注意,0xFFFF 在二进制中是 1111111111111111。

关于c++ - 分解 LPARAM 变量并查看位组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6954571/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com