Есть ли способ получить int.from_bytes () для чтения 2 символов одновременно из вывода readline (), а не 1 - PullRequest
0 голосов
/ 10 июня 2019

У меня есть данные, поступающие по последовательному порту, которые мне нужно анализировать в режиме реального времени, данные в форме 24-битных двоичных двоичных данных, дополняющих MSB. Не каждый пакет данных завершен, поэтому каждый из них, как символ новой строки, в конце. Когда я использую int.from_bytes () для получения десятичного значения, он рассматривает каждый из 6 символов как восьмибитное, например: b'9aa518 \ n'- пример строки, которую производит readline (). Я хочу прочитать 9a a5 и 18, а не 9 a a 5 1 8.

Я пытался преобразовать в str, а затем вставить дополнительные символы, чтобы получить 'b' \ x9a \ xa5 \ x18 ', но я получаю ошибки при вставке символа \. Кроме того, в конечном итоге будет получено вдвое больше данных при 8 тыс. Выборок в секунду, поэтому процедура Python должна быть максимально быстрой.

Это код, с которым я сейчас работаю:

import serial

import serial.tools.list_ports as port_list
ports = list(port_list.comports())
for p in ports:
    print(p)

s = serial.Serial('COM4', timeout = None, baudrate = 9600)

n = 0
pos = 0
output = ""
result = 0

while n < 100: 
    res = bytes(s.readline())
    res2 = bytes(res[:-1])

    print(res)
    print(res2)
    print(res2[0:2])
    print(res2[2:4])
    print(res2[4:6])

    print(output)
    result = int.from_bytes(res2, byteorder = 'big', signed = True)
    print(result)
    n += 1   

s.close()

И это вывод консоли:

b'9aa518 \ п '

b'9aa518'

b'9a '

b'a5'

b'18'

63090405486904

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...