character-encoding - 为键盘修饰符 + 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)
果然,我觉得这很可怕,并认为这可以用位移或类似的方法做得更好。这怎么可能做得更好?
解决方案
而是分别为 ctrl、alt、shift 添加 256、512 和 1024。然后以您正在使用的任何语言(问题标签中缺少)使用and运算符来提取修饰符和代码。在 C 和许多语言中,该运算符是&
. 如果按下shiftX & 1024
则不为零。X & 255
是字符代码。
推荐阅读
- angular - Angular 8 ngFor - 如何获取行 ID
- linux - Docker 中的 udevadm:命令“/bin/sh -c udevadm control --reload-rules”返回非零代码:2
- sql - 计数值并将它们分组,没有空值
- python - 不要在线图中对变量进行排序
- ios - Xcode 打字助手不显示 {} singledisplayimage 方法
- java - 为什么文件转换为 PDF 时格式会发生变化?
- magento2 - Magento 2 错误 不支持当前版本的 RDBMS。使用版本:10.1.37-MariaDB。支持的版本:MySQL-8、MySQL-5.7、MariaDB-(10.2-10.4)
- ansible - Playbook 无法创建运行到致命错误的 VM
- c# - 如何处理多个字符串值并将这些字符串值与用户输入进行比较?
- html - Iconify 图标未呈现