Каковы значения ascii для up down left right?

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

9 ответов


нет реальных кодов ascii для этих ключей как таковых, вам нужно будет проверить коды сканирования для этих ключей, известные как Make и Break key codes согласно 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.. это будет найдено в заголовочном файле windows вашего C++.h, как я помню, в папке include SDK.

не полагайтесь на ключ-коды, чтобы иметь те же "идентичные ascii" коды, показанные здесь, как Операционная система будет перепрограммировать весь код BIOS в том, что ОС считает нужным, естественно, это ожидалось, потому что, поскольку код BIOS 16bit, а ОС (в настоящее время 32bit защищенный режим), конечно, эти коды из 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;
}

эта процедура на самом деле вернула коды для up, down 328 и 336 соответственно (у меня нет кода для left и right на самом деле, это в моей старой поваренной книге!) Фактический scancode находится в lo переменной. Ключи, отличные от A-Z,0-9, имели код сканирования 0 через bioskey режим.... причина 256 добавляется, потому что переменная lo имеет код 0 и hi переменная будет иметь код сканирования и добавляет к нему 256, чтобы не путать с кодами ascii...


короче:

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


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


значения ascii:

  1. ключ - 224 72

  2. клавиши - 224 80

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

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

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

EDIT: это может быть unicode оглядываясь назад, но они работают.


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

вы можете проверить его путем компиляции и запуска этой небольшой программы на 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  
}

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

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

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


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


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

  • Стрелка Влево = 2424832
  • Стрелка Вправо = 2555904
  • Стрелка Вверх = 2490368
  • Стрелка Вниз = 2621440