2017-01-30 6 views
0

Я читаю символы с ультразвукового датчика, который выводит в формате RS232 - он отправляет R, за которым следуют 4 цифры, а затем возврат каретки, например «R1597 \ r ».Детекторы от датчика rs232 имеют «b» спереди в python 3

В python3 этому предшествует «b», так что он становится b'R1597 \ r '. Я искал другие связанные вопросы о переполнении стека, и, насколько я понимаю, это просто указывает, что символы являются байтовыми литералами, а «b» не находится в фактических данных. Однако код;

char=ser.read() 
while char != 'R': 
    ....... 

не работает - он просто петли навсегда ждет «R».

Но если я использую код;

char=ser.read() 
while char != b'R': 
..... 

работает - петли до тех пор, пока не появится b'R ', а затем перейдет к следующему фрагменту кода.

Итак, теперь я смущен, имеет ли python3 «b» из данных, которые мне теперь нужно снять?

Любая помощь очень ценится.

Cheers.

+0

Возможный дубликат [В Python3, когда я читаю двоичный файл, почему «b» добавляется к моему контенту?] (Http://stackoverflow.com/questions/15845074/in-python3-when-im -reading-а-бинарного-файл-почему-делает-б-стать-предваряется к моему-с) –

ответ

0

Нет, b не вводится в ваши данные. b сообщает Python 3, что буква 'R' следует интерпретировать как байт, а не строковый литерал. Строковый символ может быть больше, чем просто байтом, в зависимости от базовой кодировки (например, UTF-8, UTF-16 и т. Д.). В вашем случае RS-232 вы получаете 7-битные символы ASCII (т. Е. Байты), поэтому b гарантирует, что вы сравниваете байты с байтами. Для получения дополнительной информации о байтовых литералах см. Section 2.4.1 руководства Python 3.

 Смежные вопросы

  • Нет связанных вопросов^_^