箭头键(上/下/左/右)的ASCII值是多少?
简而言之:
左箭头:37
上箭头:38
右箭头:39
下箭头:40
对于这些按键并没有真正的ASCII码,你需要查看这些按键的扫描码,也就是所谓的制作和断开键码,详见helppc的信息。之所以这些码听起来像是ASCII码,是因为旧版BIOS中断0x16和键盘中断0x9处理这些按键码。
正常模式 数字小键盘开启时 制作 断开 制作 断开 向下箭头 E0 50 E0 D0 E0 2A E0 50 E0 D0 E0 AA 向左箭头 E0 4B E0 CB E0 2A E0 4B E0 CB E0 AA 向右箭头 E0 4D E0 CD E0 2A E0 4D E0 CD E0 AA 向上箭头 E0 48 E0 C8 E0 2A E0 48 E0 C8 E0 AA
因此,通过查看制作键码后面跟随的代码,例如0x50、0x4B、0x4D、0x48等,可能会产生将键码视为“ASCII”而导致混淆的问题... 答案是不要,因为平台和操作系统都有所不同,在Windows中,这些按键会有相应的虚拟键码,不一定与BIOS代码相同,例如VK_UP、VK_DOWN、VK_LEFT和VK_RIGHT...这些可以在C++的头文件windows.h中找到,我记得是在SDK的include文件夹中。
不能依赖于键码具有与此处显示的“相同的标识ASCII”代码,因为操作系统会重新编程整个BIOS代码,使其适应操作系统的需求,当然这是可以预料到的,因为BIOS代码是16位的,而现今的操作系统(32位保护模式)自然不再支持那些来自BIOS的代码。
因此,在BIOS加载并开始加载受保护模式的操作系统后,原始键盘中断0x9和BIOS中断0x16将从内存中被清除,并且操作系统会覆盖该内存区域,并用他们自己的32位保护模式处理程序来处理这些键盘扫描码。
这里是一个旧版DOS编程示例,使用Borland C V3:
#include <bios.h>
int getKey(void){
int key, lo, hi;
key = bioskey(0);
lo = key & 0x00FF;
hi = (key & 0xFF00) >> 8;
return (lo == 0) ? hi + 256 : lo;
}
这个程序实际上返回了向上和向下的代码,分别为328和336(实际上我没有左右方向键的代码,这在我的旧笔记中!)实际的扫描码可以在变量lo
中找到。除了A-Z、0-9之外的键都通过bioskey
例程具有扫描码0...添加256的原因是,因为变量lo
的代码是0,而hi
变量将具有扫描码,并加上256,以避免与'ascii'代码混淆...
实际上,这个问题的答案取决于你使用的操作系统和编程语言。并没有所谓的“ASCII码”。操作系统会检测到你按下了箭头键,并触发程序可以捕获的事件。例如,在现代Windows机器上,您将获得WM_KEYUP或WM_KEYDOWN事件。通常它传递一个16位值以确定按下了哪个键。
这些键的ASCII值为:
向上箭头键 - 224 72
向下箭头键 - 224 80
向左箭头键 - 224 75
向右箭头键 - 224 77
每个键都有两个整数值作为ASCII值,因为它们是特殊键,不同于美元符号的代码只有36。这些2字节的特殊键通常将第一个数字设为224或0。可以在Windows中使用F#或删除键找到此信息。
编辑:回顾一下,这实际上可能是Unicode,但它们确实有效。
GLUT_KEY_LEFT Left function key
GLUT_KEY_RIGHT Right function key
GLUT_KEY_UP Up function key
GLUT_KEY_DOWN Down function key
void processSpecialKeys(int key, int x, int y) {
switch(key) {
case GLUT_KEY_F1 :
red = 1.0;
green = 0.0;
blue = 0.0; break;
case GLUT_KEY_F2 :
red = 0.0;
green = 1.0;
blue = 0.0; break;
case GLUT_KEY_F3 :
red = 0.0;
green = 0.0;
blue = 1.0; break;
}
}
#include <iostream>
#include <conio.h>
#include <cstdlib>
int show;
int main()
{
while(true)
{
int show = getch();
std::cout << show;
}
getch(); // Just to keep the console open after program execution
}
您可以利用专门的功能为您的编程目的激活导航。以下是其示例代码。
void Specialkey(int key, int x, int y)
{
switch(key)
{
case GLUT_KEY_UP:
/*Do whatever you want*/
break;
case GLUT_KEY_DOWN:
/*Do whatever you want*/
break;
case GLUT_KEY_LEFT:
/*Do whatever you want*/
break;
case GLUT_KEY_RIGHT:
/*Do whatever you want*/
break;
}
glutPostRedisplay();
}
glutSpecialFunc(Specialkey);
UP = ^[[A
DOWN = ^[[B
RIGHT = ^[[C
LEFT = ^[[D
其中^[
是表示转义的符号,但您将使用ASCII值27来代替转义符号以及括号和字母。在我的情况下,使用串行连接通信这些方向,对于向上箭头,我发送了字节序列27,91,65
,表示^[, [, A
。如果您是为了JavaScript目的而来,想要知道哪个键被按下了。
那么JavaScript中有一个名为keydown的AddEventListener方法。
它可以给我们返回被按下的键,但是你可以在keydown或onkeydown上执行某些操作,两者几乎相同。
被按下的键的方法有:
.code:这将返回一个字符串,告诉您按下了哪个键,例如ArrowUp、ArrowDown、KeyW、Keyr等。 .keyCode:此方法已过时,但仍可使用。它返回一个整数,例如小写a ---> 65,大写A:65,主要是ASCII码,表示不区分大小写 ArrowLeft:37,ArrowUp:38,ArrowRight:39和ArrowDown:40
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
</head>
<body>
<h1 id="show">Press Any Button</h1>
// JavaScript Code Starting From here See Magic By Pressing Any Buttton
<script>
document.addEventListener('keydown', (key)=> {
let keycode = key.keyCode;
document.getElementById('show').innerText = keycode;
/*
let keyString = key.code;
switch(keyString){
case "ArrowLeft":
console.log("Left Key is Pressed");
break;
case "ArrowUp":
console.log("Up Key is Pressed");
break;
case "ArrowRight":
console.log("Right Key is Pressed");
break;
case "ArrowDown":
console.log("Down Key is Pressed");
break;
default:
console.log("Any Other Key is Pressed");
break;
}
*/
});
</script>
</body>
</html>