问题描述
我想将三个键盘修饰符(CTRL,ALT,SHIFT)和所按键的ASCII码编码为一个值。这自然属于位掩码类别。 我可以这样做的一种方法是,发件人将每个密钥编码如下:
CTRL: 1000
ALT: 10000
SHIFT: 100000
KeyCode: 1-255
例如,如果我单击所有修改器+ ascii表中的最后一个键,则会得到: 100000 + 10000 + 1000 + 255 =111255。然后可以在接收方进行减法运算,并检查数字是否低于0,如下所示:
has_shift = X - 100000 < 0
has_alt = X - 10000 < 0
has_ctrl = X - 1000 < 0
if has_shift
X -= 100000
if has_alt
X -= 10000
if has_ctrl
X -= 1000
keyCode = X (the remainder)
当然,我发现这太可怕了,并认为可以使用移位或在球场上进行某些操作来更好地做到这一点。怎么可能做得更好?
解决方法
相反,分别为ctrl,alt和shift加256、512和1024。然后使用您使用的任何语言(缺少问题标记)使用和运算符提取修饰符和代码。在C语言和许多语言中,该运算符为&
。因此,如果按下shift键,X & 1024
不为零。 X & 255
是字符代码。