我有不同的 uint64 数字,我想通过 CAN-Bus 和 Python 中的 SocketCAN 发送。我需要将大数划分为 8 个字节,以便将值分配给 CAN 数据字节。但我正在努力实施。我很感激任何帮助或建议。
谢谢你的帮助!
假设您使用的是 Python 3,您可以简单地使用 Python int 的to_bytes
方法,如下所示:
i = 65357
print(hex(i))
print(i.to_bytes(8, 'big'))
print(i.to_bytes(8, 'little'))
输出:
0xff4d
b'\x00\x00\x00\x00\x00\x00\xffM'
b'M\xff\x00\x00\x00\x00\x00\x00'
不确定您是否正在使用该python-can
库,但如果您是,您可以将字节、整数列表或字节数组传递给can.Message。
在将数字转换为字节表示时,该struct
模块是您的朋友:
i = 65357
print(hex(i))
bigendian = struct.pack(">Q", i)
littleendian = struct.pack("<Q", i)
print(repr(bigendian)
print(repr(littleendian)
输出如预期:
'0x10001'
b'\x00\x00\x00\x00\x00\x01\x00\x01'
b'\x01\x00\x01\x00\x00\x00\x00\x00'
这意味着您可以轻松地使用各个字节(按您需要的顺序)通过 CAN 总线发送它们