Я написал скрипт чтения python, который имеет следующий код:
def read_serial():
while True:
# prepare for response
out = ''
while ser.inWaiting() > 0:
out += ser.read(1).decode('unicode_escape')
if out != '':
response_header = out.encode('unicode_escape').strip()
print( "Response recieved " ,response_header)
print((response_header[0],response_header[1],response_header[2])) //line 2
Итак, массив байтов, который я отправляю:
data[] = {0x9c,0x10,0x01,0x05,0x07,0x08};
и на стороне python... в строке 2 я получаю это:
Response recieved b'\\\x9c\\\x10\\\x01\\\x05\\\x07\\\x08'
(92, 120, 57)
Почему 92,120,57, что это значит, потому что для 9C десятичным числом будет 156?
Какие-либо предложения? Или какой метод кодирования вы предлагаете для байтов?
Когда я делаю это без какой-либо техники кодирования. Для байта выше 126, например, 0xab.. Я получаю эту ошибку.. UnicodeDecodeError: кодек 'utf-8' не может декодировать байт 0xab в позиции 0: недопустимый начальный байт
При отправке байтов данных вам вообще не нужна кодировка. send(bytes([0x9c,0x10,0x01,0x05,0x07,0x08]))
. На самом деле покажите свой код отправки и получения, если вам нужна дополнительная помощь.
@Mark я отправляю с ардуино
out = b''
и out += ser.read(1)
тогда. Просто получите байт. Декодирование не требуется.
Просто получите байты. Что-то вроде этого, так как я не могу запустить ваш код:
def read_serial():
while True:
# prepare for response
out = b'' # bytes type
while ser.inWaiting() > 0:
out += ser.read(1)
if out != b'':
print("Response received:",out.hex())
Вы кодируете как escape-последовательности Unicode, поэтому (92,120,57) - это коды ASCII для обратной косой черты,
x
и 9. Я предполагаю, что вы делаете это на стороне отправки, чтобы также нуждаться в декодировании. Пропустите кодирование/декодирование и просто отправляйте байты.