首页 > 解决方案 > 为键盘修饰符 + ASCII 代码创建位掩码

问题描述

我想将三个键盘修饰符(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)

果然,我觉得这很可怕,并认为这可以用位移或类似的方法做得更好。这怎么可能做得更好?

标签: character-encodingcompressionbitbit-shift

解决方案


而是分别为 ctrl、alt、shift 添加 256、512 和 1024。然后以您正在使用的任何语言(问题标签中缺少)使用and运算符来提取修饰符和代码。在 C 和许多语言中,该运算符是&. 如果按下shiftX & 1024则不为零。X & 255是字符代码。


推荐阅读