web-dev-qa-db-ja.com

上下左右のアスキー値は何ですか?

ASCII矢印キーの値は何ですか?(上/下/左/右)

39
Laz

これらのキーには実際のアスキーコードはないため、これらのキーのスキャンコードを確認する必要があります。これは、 helppc の情報に従って、キーコードの作成とブレークとして知られています。コードが「ascii」に聞こえるのは、キーコードが古いBIOS割り込み0x16とキーボード割り込み0x9によって処理されるためです。

 Normal Mode Num lock on 
 Make Break Make Break 
下矢印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などのMakeキーコードのE0に続くコードを見ると、キーコードを見てそれらを「ascii」として扱うことで混乱が生じます...答えはしてはいけないプラットフォームが変わるとOSが変わるので、Windowsではそれらのキーに対応する仮想キーコードがあり、必ずしもBIOSと同じではないコード、VK_UP、VK_DOWN、VK_LEFT、VK_RIGHT ..これは、C++のヘッダーファイルwindows.hにあります。これは、SDKのincludeフォルダーで思い出します。

ここに示されているのと同じ「同一のASCII」コードをキーコードに依存しないでください。オペレーティングシステムは、OSが適合すると思われるものでBIOSコード全体を再プログラムします。 OS(現在は32ビット保護モード)、もちろんBIOSからのこれらのコードは無効になります。

したがって、元のキーボード割り込み0x9およびBIOS割り込み0x16は、BIOSが読み込んだ後、メモリから消去され、プロテクトモードOSが読み込みを開始すると、メモリのその領域を上書きし、独自の32ビットプロテクトモードハンドラーで置き換えて対処しますこれらのキーボードスキャンコードを使用します。

これは、Borland C v3を使用した、DOSプログラミングの昔のコードサンプルです。

#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で返しました(実際には、左と右のコードはありません。これは私の古い料理本にあります!)実際のスキャンコードはlo変数。 AZ、0-9以外のキーには、bioskeyルーチンを介してスキャンコード0がありました。変数loのコードは0であり、hi変数はスキャンコードを持ち、 'ascii'コードと混同しないように256を追加します...

24
t0mm13b

要するに:

左矢印:37
上矢印:38
右矢印:39
下矢印:40

55

実際、この質問に対する答えは、使用しているオペレーティングシステムとプログラミング言語によって異なります。 「ASCIIコード」自体はありません。オペレーティングシステムは、ユーザーが矢印キーを押したことを検出し、プログラムがキャプチャできるイベントをトリガーします。たとえば、最新のWindowsマシンでは、WM_KEYUPまたはWM_KEYDOWNイベントを取得します。通常、16ビット値を渡して、プッシュされたキーを判別します。

11
Icemanind

以下のアスキー値:

  1. 上キー-224 72

  2. ダウンキー-224 80

  3. 左キー-224 75

  4. 右キー-224 77

これらのそれぞれは、単に36である$のコードとは対照的に、特別なキーであるため、ascii値に2つの整数値を持っています。これらの2バイトの特別なキーは、通常、224または0 WindowsのF#または削除キーで見つかりました。

編集:これは実際には振り返ってユニコードかもしれませんが、彼らは動作します。

8
Chris - Jr

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;
}
}
6
Steven

この小さな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  
}
5
user2204073

プログラミング目的でナビゲーションをアクティブ化するための特別な機能を利用できます。以下にサンプルコードを示します。

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

これが問題を解決することを願っています!

1
Rajeev Kumar

矢印文字のASCIIコードは次のとおりです。↑24↓25→26←27

0
Paul Bently

Windowsのキーボードから値を取得すると、次のことがわかります。

  • 左矢印= 2424832
  • 右矢印= 2555904
  • 上矢印= 2490368
  • 下矢印= 2621440
0
Moti Hamo