微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Python 中,如何将 0 到 255 之间的整数转换为单个无符号字节?

如何解决在 Python 中,如何将 0 到 255 之间的整数转换为单个无符号字节?

我的笔记本电脑运行一个 Python 程序,该程序读取操纵杆以向 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 的值为负”可能不正确。

解决方法

你只需要:

speed_command = bytes([speed])

bytes 构造函数接受 int 对象的可迭代对象,因此在将其传递给构造函数时只需将其放入列表中即可。

,

您可以使用 pack 内置模块中的 struct 方法。它将格式作为第一个参数,并将一个值(或多个值)打包到此格式中作为下一个参数。对于 unsigned char,所需的格式为 B。该模块支持许多其他格式,这对于将其他数据发送到您的 Arduino 可能很有用。请参阅 the struct module documentation 了解更多信息,包括 a list of format characters

>>> import struct
>>> speed = 255
>>> struct.pack('B',speed)
b'\xff'

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。