gpt4 book ai didi

c++ - GetAsyncKeyState 的返回值似乎与描述不符

转载 作者:搜寻专家 更新时间:2023-10-31 00:19:36 27 4
gpt4 key购买 nike

我调查了GetAsyncKeyState在关于如何通过 WASD 键使虚构角色在屏幕上移动的代码示例中看到它之后。

我在它的 MSDN 页面上读到了这个:

Return value

Type: SHORT

If the function succeeds, the return value specifies whether the keywas pressed since the last call to GetAsyncKeyState, and whether thekey is currently up or down.

If the most significant bit is set, thekey is down, and if the least significant bit is set, the key waspressed after the previous call to GetAsyncKeyState.

我无法理解返回值的结构:

它说类型是 short,所以我想通过它你可以将数字零表示为二进制,如 0000000000000000,或十六进制如 0x0000 (据我所知,一个十六进制数字代表四个二进制数字)。

描述说最高有效位应该在按键被按下时设置。这让我觉得,如果设置了上述位,数字将如下所示:

1000000000000000

为了在我的程序中更好地使用它,我通过将它转换为十六进制来缩短它,结果为:

0x8000

因为十六进制的8应该对应二进制的1000

当我看到上述机制在我的程序中不起作用时(执行 GetAsyncKeyState(chr) == 0x8000 总是会产生 false,无论按键是否被按下)我又拿了一个查看原始示例,我首先看到了使用的功能。在那里,返回值与数字 -32767 进行比较,当使用 Windows 计算器将其快速转换为十六进制时,结果为值 0xFFFFFFFFFFFF8001。现在,不要介意最后一个十六进制数字 (1),因为这是用于检查最低有效位是否也处于事件状态的位,但在我的情况下我不希望这样。

这里我无法理解的地方如下:

  1. 为什么,如果一个十六进制数字表示四个二进制数字,并且函数的输出值是一个短整型(两个字节),这里的数字由十六个十六进制数字表示?这不是八个字节吗?
  2. 返回值的描述说如果按键被按下,最高有效位将被设置为 1,这让我相信数字看起来像 1000000000000000 ,而不是 0000000000001000。我在这里缺少什么?

最佳答案

GetAsyncKeyState(chr) == 0x8000

这是错误的检查。使用:

!!(GetAsyncKeyState(chr) & 0x8000)

查看是否设置了最高有效位。

0xFFFFFFFFFFFF8001 与 GetAsyncKeyState 的实际返回值不对应。 Windows 计算器不知道从 GetAsyncKeyState 返回的值的大小,因此它假定您使用的是 64 位数字。您可以在其设置中覆盖它。

关于c++ - GetAsyncKeyState 的返回值似乎与描述不符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7895888/

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