我有不同的uint64号码,我想用Python中的SocketCAN通过CAN-Bus发送。我需要将大数字除以8个字节,因此我可以将值分配给CAN数据字节。但我正在努力实施。 我很感激任何帮助或建议。
感谢您的帮助!
答案 0 :(得分: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总线发送它们
答案 1 :(得分: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传递任意字节,一个整数列表或一个字节数组。