Quelles sont les valeurs ASCII des touches de direction? (haut bas Gauche Droite)
Il n'y a pas de vrais codes ASCII pour ces clés en tant que telles, vous devrez donc vérifier les codes de balayage pour ces clés, appelés codes de clé Créer et Couper selon les informations de helppc . La raison pour laquelle les codes sonnent 'ascii' est parce que les codes de clé sont gérés par l'ancienne interruption 0x16 du BIOS et l'interruption du clavier 0x9.
Mode Normal Verrouillage numérique activé Make Break Make Break Flèche vers le bas E0 50 E0 D0 E0 2A E0 50 E0 D0 E0 AA Flèche vers la gauche E0 4B E0 CB E0 2A E0 4B E0 CB E0 AA Flèche vers la droite E0 4D E0 CD E0 2A E0 4D E0 CD E0 AA Flèche vers le haut E0 48 E0 C8 E0 2A E0 48 E0 C8 E0 AA
Par conséquent, en regardant les codes suivant E0 pour le code de clé Make, tels que 0x50, 0x4B, 0x4D, 0x48, respectivement, c’est là que la confusion découle du fait de regarder les codes de clé et de les traiter comme "ascii" ... la réponse est ne pas car la plate-forme varie, le système d'exploitation varie. Sous Windows, le code de clé virtuel correspondant à ces clés ne correspond pas nécessairement aux codes du BIOS, VK_UP, VK_DOWN, VK_LEFT, VK_RIGHT .. ce sera trouvé dans le fichier d’en-tête de votre C++, Windows.h, comme je me le rappelle dans le dossier d’inclusion du SDK.
Ne vous fiez pas aux codes de clé pour avoir les mêmes codes «identiques» affichés ici, car le système d’exploitation reprogrammera le code BIOS dans son intégralité, quel que soit le système d’exploitation choisi. Naturellement, cela est attendu, car le code BIOS est de 16 bits. le système d’exploitation (de nos jours sont en mode protégé 32 bits), bien entendu ces codes du BIOS ne seront plus valables.
Par conséquent, les interruptions du clavier d'origine 0x9 et du BIOS 0x16 seraient effacées de la mémoire après le chargement du BIOS. Lorsque le système d'exploitation en mode protégé commence à se charger, il écrase cette zone de mémoire et la remplace par ses propres gestionnaires de mode protégé à 32 bits. avec ces codes de balayage du clavier.
Voici un exemple de code de l'ancienne programmation DOS utilisant Borland C v3:
# include <bios.h> int getKey (void) { int key, lo, hi; clé = bioskey (0); lo = clé & 0x00FF; hi = (clé & 0xFF00) >> 8; retourner (lo == 0)? hi + 256: lo; }
En fait, cette routine a renvoyé les codes pour le haut, le bas est 328 et 336 respectivement (je n'ai pas le code pour le gauche et le droit, c'est dans mon ancien livre de cuisine!). Le scancode réel se trouve dans la variable lo
. Les clés autres que AZ, 0-9, avaient un code de balayage de 0 via la routine bioskey
.... la raison 256 est ajoutée, car la variable lo
a le code de 0 et la variable hi
aurait le code de balayage et en ajoutait 256 afin de ne pas confondre avec les codes "ascii" ...
En bref:
flèche gauche: 37
flèche vers le haut: 38
flèche vers la droite: 39
flèche vers le bas: 40
En réalité, la réponse à cette question dépend du système d'exploitation et du langage de programmation que vous utilisez. Il n'y a pas de "code ASCII" en soi. Le système d'exploitation détecte que vous appuyez sur une flèche et déclenche un événement que les programmes peuvent capturer. Par exemple, sur les machines Windows modernes, vous obtiendrez un événement WM_KEYUP ou WM_KEYDOWN. Il transmet généralement une valeur de 16 bits pour déterminer quelle touche a été enfoncée.
Les valeurs ascii du:
Touche haut - 224 72
Touche vers le bas - 224 80
Touche gauche - 224 75
Touche droite - 224 77
Chacune de celles-ci a deux valeurs entières pour valeur ascii, car ce sont des clés spéciales, par opposition au code de $, qui est simplement 36. Ces clés spéciales à 2 octets ont généralement le premier chiffre soit 224, soit 0 trouvé avec le F # dans Windows, ou la touche Suppr.
EDIT: Cela peut effectivement être unicode en regardant en arrière, mais ils fonctionnent.
Si vous programmez sous OpenGL, utilisez GLUT. La page suivante doit vous aider: 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;
}
}
Vous pouvez le vérifier en compilant et en exécutant ce petit programme 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
}
Vous pouvez utiliser la fonction spéciale pour activer la navigation à des fins de programmation. Vous trouverez ci-dessous un exemple de code.
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();
}
Ajoutez ceci à votre fonction principale
glutSpecialFunc(Specialkey);
J'espère que cela va résoudre le problème!
Les codes Ascii pour les caractères de flèche sont les suivants: ↑ 24 ↓ 25 → 26 ← 27
Obtenir les valeurs du clavier sous Windows montre ce qui suit: