2015-01-26 6 views
1

При попытке связаться с контроллером шагового двигателя через последовательный порт с помощью pyserial я получаю что-то вроде этого как ответ '/0\x03\r\n'.Интерпретация байтов, полученных через последовательный порт

мне нужно, чтобы иметь возможность конвертировать '\x03' байт в двоичную, та часть, которая имеет меня путают, что и '\x03' считается одним символом строки, так что я не могу ничего подобного сделать: '\x03'[2:] получить '03'.

Как я могу конвертировать '\x03' в нечто полезное, например: 00000011 или '03'?

ответ

2

\x03 это путь в Python сказать вам, что есть один байты в той части строки, которая имеет шестнадцатеричное значение 03, которое не является печатным символом. Первые два символа являются для печати (hex 2F и hex 30 соответственно, символы ASCII / и 0), поэтому Python использовал символы ASCII, с которыми они соответствуют.

Вы можете использовать ord(), чтобы превратить это в целое число:

>>> ord('\x03') 
3 

Вы можете использовать bin() function, или format() function превратить это число в двоичном представлении, с функцией format() является более гибким и универсальным опция:

>>> bin(3) 
'0b11' 
>>> format(3, 'b') 
'11' 
>>> format(3, '08b') 
'00000011' 
0

Попробуйте использовать ord, чтобы получить числовое значение каждого персонажа.

>>> s = '/0\x03\r\n' 
>>> [ord(c) for c in s] 
[47, 48, 3, 13, 10] 
>>> [ord(c) for c in s][2] 
3 
Смежные вопросы