У меня есть данные, поступающие по последовательному порту, которые мне нужно анализировать в режиме реального времени, данные в форме 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