将ascii字符转换为带符号的8位整数python

use*_*784 5 python signed ascii integer

感觉应该很简单,但是我还没有找到答案。

在python脚本中,我正在从USB设备读取数据(USB鼠标的x和y移动)。它以单个ASCII字符到达。我可以使用ord轻松转换为无符号整数(0-255)。但是,我希望将其作为带符号的整数(-128至127)-我该怎么做?

任何帮助,不胜感激!非常感谢。

Mar*_*ers 6

如果超过127,则减去256:

unsigned = ord(character)
signed = unsigned - 256 if unsigned > 127 else unsigned
Run Code Online (Sandbox Code Playgroud)

或者,用struct模块重新包装字节:

from struct import pack, unpack
signed = unpack('B', pack('b', unsigned))[0]
Run Code Online (Sandbox Code Playgroud)

或直接从角色:

signed = unpack('B', character)[0]
Run Code Online (Sandbox Code Playgroud)