Перевод байт-кода в двоичное или в число с другим основанием на python
ПЛИС измеряет угол поворота вала, и посылает двоичный код по COM-port (uart интерфейс). Я пытаюсь написать программу с gui на python, которая будет принимать двоичный код с ПЛИС и выводить угол поворота вала на графике.
Для приёма данных использую библиотеку pyserial. Данные с com порта принимаются, но выдаются в виде байткода. По типу b'\x8c'. Данные передаются 8и битными словами. Я так понимаю b'\x8c' это hex число 8c или в двоичном представлении - 10001100, принятое с ПЛИС по ком-порту.
Собственно вопрос. Как этот байт код преобразовать в двоичное число вида 0b10001100 или любой другой системы счисления? Чтобы python воспринимал это число как int, и чтобы с ним можно было производить дальнейшие операции.
Код работы с ком-портом:
ser = serial.Serial("COM8", bauderate=115200)
while True:
line = ser.read()
print(line)
Пишу с телефона и в первый раз задаю вопрос, так что сразу прошу прощения если что-то неправильно оформил.
Ответы (1 шт):
Данные с порта с помощью read принимаются в массив байтов line. Если вы делаете print этого массива, то по умолчанию он выводится в шестнадцатиричном виде, но само содержимое не зависит от его представления - это в любом случае набор байтов.
Нужно использовать отдельные байты - используйте:
if len(buf) > 2:
checksum = (line[0] + line[1]) & 0xFF
А вот коротенький пример - как копить данные, ведь пакет данных не обязан весь за один раз прийти:
in_len = 0
sum_len = 0
lst = []
while sum_len < 4:
buf = ser.read(4)
in_len = len(buf)
sum_len += in_len
print(buf, in_len)
for i in range(in_len):
lst.append(buf[i])
time.sleep(0.1)
print(lst)