如何在Python中将键码转换为字符?

2 投票
2 回答
11972 浏览
提问于 2025-04-18 08:04

我正在Linux上写一个程序,这个程序可以读取并区分来自两个USB设备(两个条形码扫描器)的输入,这些设备模拟键盘的功能。

我已经可以读取USB的输入了,但这个输入是在操作系统把按键代码转换成字符之前读取的。

比如说,当我读取到'a'时,我得到的是24,'b'时得到的是25,等等……

举个例子,当我读取到'a'时,我得到的是4,'b'时得到的是5,等等……

有没有办法在不手动映射的情况下把这个代码转换成字符呢?

以下是一些输出示例:

按下KEYPRESS = a 输出 = array('B', [0, 0, 4, 0, 0, 0, 0, 0])

按下KEYPRESS = SHIFT + a 输出 = array('B', [2, 0, 4, 0, 0, 0, 0, 0])

按下KEYPRESS = 1 输出 = array('B', [0, 0, 30, 0, 0, 0, 0, 0])

按下KEYPRESS = ENTER 输出 = array('B', [0, 0, 81, 0, 0, 0, 0, 0])

谢谢!

2 个回答

2

我已经可以从USB读取输入了,但这发生在操作系统将按键代码转换成字符之前。我觉得问题出在你的接口或驱动程序上。

在ASCII编码中,字母'a'的值是97,它的二进制表示是0b1100001,而你收到的是27,它的二进制表示是0b11000。同样,字母'b'应该是0b1100010,但你收到的是25,二进制是0b11001。检查一下你的硬件,看看输入的第1位和第3位是否丢失了。

你收到的是USB扫描码。我认为没有第三方的Python库可以帮你完成这个转换。我建议你参考一下USB扫描码表,然后根据这个表创建一个USB扫描码和对应ASCII字符的字典。

4

使用 chr 这个函数。Python使用的字符编码方式和你收到的可能不一样,这种编码叫做 ASCII。所以,你需要在你的键值上加上73,才能调整这个偏差。

>>> chr(24 + 73)
'a'
>>> chr(25 + 73)
'b'

撰写回答