key=key&0xff

来源:百度知道 编辑:UC知道 时间:2024/06/17 02:58:51
key=bioskey(0);
if(key==0x11b)
exit(0);
key=key&0xff;
if(key=='\t')
{.....

为什么不能去掉第四行 key=key&0xff;啊?
从百度搜索中我知道这应该是个很简单的问题 因为没人问过

键盘按键扫描码一共16位.
===============
0-7,OEM扫描码
8, 扩展键标志
9-12,保留
13,上下文代码
14,先前键状态
15,过渡状态
===============
扩展键标志允许应用程序区分在大多数键盘上出现的复制键.对于与IBM兼容的PC机上所使用的101和102键盘,扩展键标志是为下列键设置的:键盘右边的Ctrl和Alt键;集中在键盘主体和数字小键盘之间的Home,End,Insert,Delet,Page Up,Page Down以及箭头键;还有键中区的驾车键(Enter)和斜杠(/)键.对所有其他键,扩展标志位为0.OEM扫描码是标识键盘BIOS键的8位值...过渡状态,先前键状态以及上下文代码通常也会被忽略,但是它们偶尔也有用.先前键状态值等于1说明产生了自动重复输入,也就是一个键被按下并保持了一段时间.
=======================
以上摘自<<MFC Windows程序设计>>126页,key=key&0xff; 说明是取按键的OEM扫描码.

这样可以把key的高字节设置为0,只保留最低一个字节的数据.

key=bioskey(0); 这个你得到的只是扫描码.
扫描码有两个字节低的才是ASCII 码,用key=key&0xff就是把
key 和0000000011111111 与,把低字节的保存下来.
你也可用这函数,直接得到ASCII码.key=bioskey(1);

这要看key是什么类型,如果是int,那么这一句是必须的,因为程序运行过程中不能保证key的值正好是short,有了这一句就可以保证任何时候都只取key的低8位,可以避免很多不可预测的错误