Перевод байт-кода в двоичное или в число с другим основанием на 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 шт):

Автор решения: MBo

Данные с порта с помощью 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)
→ Ссылка