uint64 в шестнадцатеричный массив в Python - PullRequest
0 голосов
/ 07 июня 2018

У меня есть разные номера uint64, которые я хочу отправить через CAN-Bus с SocketCAN в Python.Мне нужно разделить большое число на 8 байтов, чтобы я мог присвоить значения байтам данных CAN.Но я борюсь с реализацией.Я благодарен за любую помощь или предложение.

Спасибо за вашу помощь!

Ответы [ 2 ]

0 голосов
/ 09 июня 2018

Предполагая, что вы используете 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 .

0 голосов
/ 07 июня 2018

Когда дело доходит до преобразования чисел в их байтовое представление, модуль 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-шине

...