方向键↑↓←→的ACSII码值是多少?

cybbs001 2009-07-10 05:38:32
我写了一小段程序想查看每个按键的ACSII码值 如下

void main()
{
int n;
char p;
while(1)
{
p = getche();
fflush(stdin);
n = (int)p;
printf(" >> %d\n", n);
}
}

结果发现按方向键的时候输出很奇怪:
á >> -32
>> 80
(按一下会跳出两行)
请问这是怎么回事?

我本来想写一个switch语句用来检测按下的方向键的
结果一看这个输出就傻掉了 应该怎么写啊??
...全文
1507 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangyongnihao1 2009-07-11
  • 打赏
  • 举报
回复
10进制

上 38
下 40
左 37
右 39
pcvvv 2009-07-11
  • 打赏
  • 举报
回复
强帖mark!!
cybbs001 2009-07-11
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 blh 的回复:]
因为字符值有限,对于这些控制输入,会产生一个0xe0输入作为前导,随后在产生一个按键的键值,这个前导字符可以作为一个转译,告诉接受者按照输入控制键处理随后的键值,而不是按照一般的字母数字键进行处理,这个转译,类似于字符串中使用'\'符号一样,这个在一些协议处理中很常用

所以你可以这样处理控制键输入

while (1)
{
i = getch();
if (i == 0xe0)
{
i = getch(); //读取键值 …
[/Quote]

原来是这样 谢谢!!
Fleeboy 2009-07-10
  • 打赏
  • 举报
回复
用getchar()写个程序,按按那四个健,在输出一下就知道了:)
blh 2009-07-10
  • 打赏
  • 举报
回复 1
因为字符值有限,对于这些控制输入,会产生一个0xe0输入作为前导,随后在产生一个按键的键值,这个前导字符可以作为一个转译,告诉接受者按照输入控制键处理随后的键值,而不是按照一般的字母数字键进行处理,这个转译,类似于字符串中使用'\'符号一样,这个在一些协议处理中很常用

所以你可以这样处理控制键输入

while (1)
{
i = getch();
if (i == 0xe0)
{
i = getch(); //读取键值
switch (i)
{
case 0x48: //UP
break;
case 0x50: //DOWN
break;
case 0x4b: //LEFT
break;
case 0x4d: //RIGHT
break;
}
}
}
  • 打赏
  • 举报
回复
上面错了..不是ASCII码,是VKEY,不好意思
  • 打赏
  • 举报
回复
0x1 鼠标左键
0x2 鼠标右键
0x3 CANCEL 键
0x4 鼠标中键
0x8 BACKSPACE 键
0x9 TAB 键
0xC CLEAR 键
0xD ENTER 键
0x10 SHIFT 键
0x11 CTRL 键
0x12 MENU 键
0x13 PAUSE 键
0x14 CAPS LOCK 键
0x1B ESC 键
0x20 SPACEBAR 键
0x21 PAGE UP 键
0x22 PAGE DOWN 键
0x23 END 键
0x24 HOME 键
0x25 LEFT ARROW 键
0x26 UP ARROW 键
0x27 RIGHT ARROW 键
0x28 DOWN ARROW 键

0x29 SELECT 键
0x2A PRINT SCREEN 键
0x2B EXECUTE 键
0x2C SNAPSHOT 键
0x2D INSERT 键
0x2E DELETE 键
0x2F HELP 键
0x90 NUM LOCK 键
====================================
大小写字母的 ASCII 码相同:

值 描述
65 A 键
66 B 键
67 C 键
68 D 键
69 E 键
70 F 键
71 G 键
72 H 键
73 I 键
74 J 键
75 K 键
76 L 键
77 M 键
78 N 键
79 O 键
80 P 键
81 Q 键
82 R 键
83 S 键
84 T 键
85 U 键
86 V 键
87 W 键
88 X 键
89 Y 键
90 Z 键
===================================
0 至 9 键的 ASCII 码:

值 描述
48 0 键
49 1 键
50 2 键
51 3 键
52 4 键
53 5 键
54 6 键
55 7 键
56 8 键
57 9 键
===================================
下列常数代表数字键盘上的键:

值 描述
0x60 0 键
0x61 1 键
0x62 2 键
0x63 3 键
0x64 4 键
0x65 5 键
0x66 6 键
0x67 7 键
0x68 8 键
0x69 9 键
0x6A MULTIPLICATION SIGN (*) 键
0x6B PLUS SIGN (+) 键
0x6C ENTER 键
0x6D MINUS SIGN (–) 键
0x6E DECIMAL POINT (.) 键
0x6F DIVISION SIGN (/) 键
====================================
下列常数代表功能键:

值 描述
0x70 F1 键
0x71 F2 键
0x72 F3 键
0x73 F4 键
0x74 F5 键
0x75 F6 键
0x76 F7 键
0x77 F8 键
0x78 F9 键
0x79 F10 键
0x7A F11 键
0x7B F12 键
0x7C F13 键
0x7D F14 键
0x7E F15 键
0x7F F16 键
====================================
arong1234 2009-07-10
  • 打赏
  • 举报
回复
vkey不等于ascii码!!他们是windows TranslateMessage翻译出来的虚拟码。简单看看MSDN内的ascii码表你就知道方向键没有ascii码的。ascii码主要是为字符而准备的,方向键是控制键不是字符
而且,由于方向键在cmd.exe中有特殊含义(如向上键、向下键分别列出上一次和下一次执行过的命令),你是否能用getche读取也是个问题!

强烈建议不要浪费时间在console上做复杂的输入输出处理,所有复杂一点的输入输出建议都用gui实现。
大前置 2009-07-10
  • 打赏
  • 举报
回复
10进制

上 38
下 40
左 37
右 39
大前置 2009-07-10
  • 打赏
  • 举报
回复
#define VK_LEFT 0x27
#define VK_UP 0x24
#define VK_RIGHT 0x26
#define VK_DOWN 0x25

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧