uint64到Python中的十六进制数组

时间:2018-06-07 14:33:29

标签: python hex byte can-bus socketcan

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

感谢您的帮助!

2 个答案:

答案 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传递任意字节,一个整数列表或一个字节数组。