【发布时间】:2021-07-06 10:29:22
【问题描述】:
我的笔记本电脑运行一个 Python 程序,该程序读取操纵杆以向 Arduino 发送速度命令,而 Arduino 又控制玩具车上的电机。为此,程序将值在 0 到 255 之间的整数转换为单个无符号字节,然后通过串行连接发送到 Arduino。
这段代码可以做到这一点:
if event.axis == axis:
speed = int((event.value + 1.0) / 2.0 * 255.0)
speedCommand = bytearray(b'\x00')
speedCommand[0] = speed
speedCommand = bytes(speedCommand)
ser.write(speedCommand)
print(speed, speedCommand)
虽然该代码有效,但它不是很优雅。我想找到一个与以“speedCommand”开头的三行执行相同操作的单行指令。我试过这个,例如:
speedCommand = chr(speed).encode()
但它仅适用于 0 到 127。任何高于 127 的数字都编码为两个字节[,因为该字符被视为有符号字节,高于 127 的值为负数]。
编辑添加:我的假设“该字符被视为一个符号字节,其值高于 127 为负数”可能不正确。
【问题讨论】:
-
" 因为该字符被视为一个有符号字节,大于 127 的值为负数。"我不认为这是怎么回事,无论如何,我已经提供了答案
-
仅供参考
speed = chr(speed).encode('latin1')将解决您的编码问题。否则编码默认为utf8 -
Mark Tolonen,
chr(speed).encode('latin1')解决方案确实适用于我的程序。很高兴知道。
标签: python type-conversion integer unsigned-char