0

我有不同的 uint64 数字,我想通过 CAN-Bus 和 Python 中的 SocketCAN 发送。我需要将大数划分为 8 个字节,以便将值分配给 CAN 数据字节。但我正在努力实施。我很感激任何帮助或建议。

谢谢你的帮助!

4

2 回答 2

1

假设您使用的是 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

于 2018-06-09T00:15:26.347 回答
1

在将数字转换为字节表示时,该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 总线发送它们

于 2018-06-07T15:44:47.317 回答