向上、向下、向左、向右的ASCII值分别是多少?

51

箭头键(上/下/左/右)的ASCII值是多少?


4
由于箭头键没有 ASCII 值,所以你正在寻找的答案在很大程度上取决于你想要在什么平台、什么操作系统上做什么事情。你的目标平台是什么?浏览器?命令行界面?其他图形用户界面?你使用的是哪个操作系统?Windows?Linux?Mac?你想做什么?读取按键值?打印箭头?移动光标? - slebetman
5
我对这个问题的错误答案种类之多感到惊讶。 - zwol
14个回答

58

简而言之:

左箭头:37
上箭头:38
右箭头:39
下箭头:40

(注:该段内容为HTML格式,保留了原有的HTML标签)

33
什么?在ASCII中,字符37-40映射为% & '和(。 - Simon Nickerson
18
这些是在浏览器中出现在event.keyCode中的正确值,但不是ASCII码。虽然我怀疑这些是原帖作者正在寻找的值。请参见:https://developer.mozilla.org/en-US/docs/DOM/KeyboardEvent - broc.seib
4
如果这些对于浏览器中的JavaScript是正确的,那么这些信息应该被添加到答案中。仅考虑问题提供的上下文和未提供的非上下文信息,这显然是无意义的废话。 - jsbueno

29

对于这些按键并没有真正的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'代码混淆...


12

实际上,这个问题的答案取决于你使用的操作系统和编程语言。并没有所谓的“ASCII码”。操作系统会检测到你按下了箭头键,并触发程序可以捕获的事件。例如,在现代Windows机器上,您将获得WM_KEYUP或WM_KEYDOWN事件。通常它传递一个16位值以确定按下了哪个键。


10
我喜欢你的回答和tommieb75的回答,但你们两个都有点含糊不清 - "没有ASCII码本身"和"没有真正的ASCII码"。明确地说:箭头键没有ASCII码,因为ASCII是一种字符编码,而不是键盘编码。在回答他们所认为的问题时,纠正一个人对问题的错误理解通常更有帮助。 - Stephen P

8
以下是需要翻译的内容:

这些键的ASCII值为:

  1. 向上箭头键 - 224 72

  2. 向下箭头键 - 224 80

  3. 向左箭头键 - 224 75

  4. 向右箭头键 - 224 77

每个键都有两个整数值作为ASCII值,因为它们是特殊键,不同于美元符号的代码只有36。这些2字节的特殊键通常将第一个数字设为224或0。可以在Windows中使用F#或删除键找到此信息。

编辑:回顾一下,这实际上可能是Unicode,但它们确实有效。


7
如果你正在使用OpenGL编程,请使用GLUT。下面的页面应该会有所帮助:http://www.lighthouse3d.com/opengl/glut/index.php?5
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;
    }
}

5
你可以通过编译并运行这个小的C ++程序来进行检查。
#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  
}

2
您可以使用特殊的功能来激活导航以用于编程目的。以下是示例代码。

您可以利用专门的功能为您的编程目的激活导航。以下是其示例代码。

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);

希望这能解决问题!

2
如果您正在使用终端,就像我在搜索时发现的那样,那么您会发现箭头键发送相应的光标移动转义序列。因此,在这种情况下, UP = ^[[A DOWN = ^[[B RIGHT = ^[[C LEFT = ^[[D 其中^[是表示转义的符号,但您将使用ASCII值27来代替转义符号以及括号和字母。在我的情况下,使用串行连接通信这些方向,对于向上箭头,我发送了字节序列27,91,65,表示^[, [, A

如果您想在iTerm2中将快捷键映射到箭头键,则需要以下内容。 - Gecko

1
ASCII码中的箭头字符对应如下: ↑ 24 ↓ 25 → 26 ← 27

0

如果您是为了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>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接