gpt4 book ai didi

c++ - 为什么斜杠键 "/"的 ASCII 值不是 47?

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

我刚刚在我们的游戏中重新分配了一个热键来使用斜线键“/”,根据 ASCII 表,它的值应该是 47。但它没有触发。它会触发我所有其他标准键。当我单步执行代码时,如果我在数字键盘上使用斜杠,我会看到 keyEventRecord 将键值显示为 191 或 111。为什么会这样?我需要以某种方式转换它吗?

为了清楚起见,我将键值存储为一个 int。

最佳答案

键盘对 ASCII 一无所知。他们只知道扫描码,这是实际 key 的供应商特定 ID。

处理后,扫描码在独立于供应商的虚拟键码中得到规范化。 191 是 VK_OEM_2(用于美式键盘中的 /? 键),111 是 VK_DIVIDE

当发送到 UI 窗口时,虚拟键代码在 WM_CHARWM_UNICHAR 消息中被转换为字符代码。这些是人类可读的字符,例如 ASCII 字符(尽管 WM_CHAR 实际上以 ANSI/UTF-16 编码呈现字符,而 WM_UNICHAR 以 UTF-32 编码呈现)。

因此,您显然正在处理键盘事件,例如 WM_KEYDOWN/UPReadConsoleInput(),它们在以下情况下报告虚拟键代码你期待的是字符代码

对于许多ASCII字符,它们的虚拟键码和它们的字符码是相同的值,例如:

#define VK_BACK           0x08
#define VK_TAB 0x09
#define VK_RETURN 0x0D
#define VK_SPACE 0x20

/*
* VK_0 - VK_9 are the same as ASCII '0' - '9' (0x30 - 0x39)
* VK_A - VK_Z are the same as ASCII 'A' - 'Z' (0x41 - 0x5A)
*/

然而,对于其他ASCII字符,它们的虚拟键码和它们的字符码有不同的值,例如:

#define VK_OEM_1          0xBA   // ';:' for US
#define VK_OEM_PLUS 0xBB // '+' any country
#define VK_OEM_COMMA 0xBC // ',' any country
#define VK_OEM_MINUS 0xBD // '-' any country
#define VK_OEM_PERIOD 0xBE // '.' any country
#define VK_OEM_2 0xBF // '/?' for US
#define VK_OEM_3 0xC0 // '`~' for US
#define VK_OEM_4 0xDB // '[{' for US
#define VK_OEM_5 0xDC // '\|' for US
#define VK_OEM_6 0xDD // ']}' for US
#define VK_OEM_7 0xDE // ''"' for US

阅读 MSDN 了解更多信息:

About Keyboard Input

关于c++ - 为什么斜杠键 "/"的 ASCII 值不是 47?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29811465/

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