Каковы значения ASCII вверх вниз слева направо? - PullRequest
38 голосов
/ 20 мая 2010

Каковы значения ASCII клавиш со стрелками? (Вверх / вниз / влево / вправо)

Ответы [ 9 ]

54 голосов
/ 20 мая 2010

Короче говоря:

стрелка влево: 37стрелка вверх: 38стрелка вправо: 39стрелка вниз: 40

22 голосов
/ 21 мая 2010

Нет реальных кодов ascii для этих ключей как таковых, вам необходимо проверить коды сканирования для этих ключей, известные как коды клавиш Make и Break согласно информации helppc . Причина, по которой коды звучат как «ascii», заключается в том, что коды клавиш обрабатываются старым прерыванием BIOS 0x16 и прерыванием клавиатуры 0x9.

                 Normal Mode            Num lock on
                 Make    Break        Make          Break
Down arrow       E0 50   E0 D0     E0 2A E0 50   E0 D0 E0 AA
Left arrow       E0 4B   E0 CB     E0 2A E0 4B   E0 CB E0 AA
Right arrow      E0 4D   E0 CD     E0 2A E0 4D   E0 CD E0 AA
Up arrow         E0 48   E0 C8     E0 2A E0 48   E0 C8 E0 AA

Следовательно, глядя на коды, следующие за E0, для кода клавиши Make, такие как 0x50, 0x4B, 0x4D, 0x48 соответственно, именно здесь возникает путаница при просмотре кодов клавиш и их обработке как «ascii» ... ответ не , так как меняется платформа, меняется ОС, в Windows она будет иметь код виртуальной клавиши, соответствующий этим ключам, не обязательно такой же, как коды BIOS, VK_UP, VK_DOWN, VK_LEFT, VK_RIGHT .. это будет найдено в заголовочном файле вашего C ++ windows.h, как я помню, в папке include SDK.

Не полагайтесь на коды клавиш, чтобы иметь те же «идентичные коды ascii», показанные здесь, поскольку операционная система перепрограммирует весь код BIOS в том виде, в котором операционная система сочтет нужным, естественно, что это следовало ожидать, поскольку код BIOS является 16-битная и ОС (в настоящее время это 32-битный защищенный режим), конечно, эти коды из BIOS больше не будут действительны.

Следовательно, исходное клавиатурное прерывание 0x9 и BIOS-прерывание 0x16 будут стерты из памяти после того, как BIOS загрузит его, и когда ОС защищенного режима начнет загрузку, она перезапишет эту область памяти и заменит ее собственным 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 переменная. Ключи, отличные от AZ, 0-9, имели код сканирования 0 с помощью процедуры bioskey .... добавлена ​​причина 256, потому что переменная lo имеет код 0, а переменная hi будет иметь отсканируйте код и добавьте к нему 256, чтобы не перепутать с кодами «ascii» ...

11 голосов
/ 20 мая 2010

Действительно, ответ на этот вопрос зависит от того, какую операционную систему и язык программирования вы используете. Там нет "ASCII-код" как таковой. Операционная система обнаруживает, что вы нажали клавишу со стрелкой, и запускает событие, которое могут захватить программы Например, на современных компьютерах с Windows вы получите событие WM_KEYUP или WM_KEYDOWN. Обычно он передает 16-битное значение, чтобы определить, какая клавиша была нажата.

8 голосов
/ 12 мая 2013

ASCII значения:

  1. Клавиша вверх - 224 72

  2. Клавиша «Вниз» - 224 80

  3. Левая клавиша - 224 75

  4. Правая клавиша - 224 77

У каждого из них есть два целочисленных значения для значения ascii, поскольку они являются специальными ключами, в отличие от кода для $, который просто равен 36. Эти 2-байтовые специальные ключи обычно имеют первую цифру 224 или 0. это можно найти с помощью F # в окнах или клавишей удаления.

РЕДАКТИРОВАТЬ: Это может быть на самом деле Unicode оглядываясь назад, но они работают.

6 голосов
/ 20 мая 2010

Если вы программируете в 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 голосов
/ 24 марта 2013

Вы можете проверить это, скомпилировав и запустив эту маленькую программу 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  
}
1 голос
/ 22 марта 2015

Вы можете использовать специальную функцию для активации навигации в целях программирования.Ниже приведен пример кода для него.

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

Надеюсь, что это поможет решить проблему!

0 голосов
/ 02 марта 2017

Получение значений с клавиатуры под окнами показывает следующее:

  • Стрелка влево = 2424832
  • Стрелка вправо = 2555904
  • Стрелка вверх = 2490368
  • Стрелка вниз = 2621440
0 голосов
/ 27 мая 2016

Коды Ascii для символов со стрелками следующие: ↑ 24 ↓ 25 → 26 ← 27

...