У меня есть строка, которая после печати выглядит так: \x4d\xff\xfd\x00\x02\x8f\x0e\x80\x66\x48\x71
Но я хочу изменить эту строку на "\x4d\xff\xfd\x00\x02\x8f\x0e\x80\x66\x48\x71"
, которая не печатается (необходимо записать в последовательный порт). Я знаю, что это проблема с "\
". как я могу заменить эти обратные косы печати на непечатные?
Если вы хотите декодировать свою строку, используйте decode()
с 'string_escape'
в качестве параметра, который интерпретирует литералы в вашей переменной как литеральную строку python (как если бы он был введен как постоянная строка в вашем коде).
mystr.decode('string_escape')
Используйте decode()
:
>>> st = r'\x4d\xff\xfd\x00\x02\x8f\x0e\x80\x66\x48\x71'
>>> print st
\x4d\xff\xfd\x00\x02\x8f\x0e\x80\x66\x48\x71
>>> print st.decode('string-escape')
MÿýfHq
Этот последний мусор - это то, что печатает мой Python при попытке распечатать вашу непечатаемую строку.
Вы смешиваете печатное представление строкового литерала со самой строкой:
>>> c = '\x4d\xff\xfd\x00\x02\x8f\x0e\x80\x66\x48\x71'
>>> c
'M\xff\xfd\x00\x02\x8f\x0e\x80fHq'
>>> len(c)
11
>>> len('\x4d\xff\xfd\x00\x02\x8f\x0e\x80\x66\x48\x71')
11
>>> len(r'\x4d\xff\xfd\x00\x02\x8f\x0e\x80\x66\x48\x71')
44
your_string.decode('string_escape')
'\\x4d\\x4e'
в'\x4d\x4e'
(то есть'MN'
)?