Шестнадцатеричное кодирование Python - PullRequest
2 голосов
/ 10 мая 2019

Я пытаюсь преобразовать байтовый массив в и из строки. Почему следующее не работает? Кодировка, кажется, добавляет дополнительную косую черту. Я использую неправильную кодировку? Я использую python3.6

In [19]: b'\x88'.decode('unicode_escape')
Out[19]: '\x88'

In [20]:  '\x88'.encode('unicode_escape')
Out[20]: b'\\x88'

Ответы [ 2 ]

2 голосов
/ 10 мая 2019

Когда использовать режим raw_unicode_escape

Символ обратной косой черты экранирован, поэтому записывается как \\.Если вы не хотите этого, попробуйте кодек raw_unicode_escape.

В редакторе здесь, когда отвечаете на ваш вопрос, пишу ли я \\ вы видите \ в ответе, поэтому мне действительно пришлось написать \\\\.Попробуйте сами, чтобы понять, что я имею в виду (или отредактируйте этот ответ, чтобы понять, что я имею в виду).

Это то, что я на самом деле должен был написать выше

The backslash character is escaped so is written as \\\\.
If you don't want that try the 'raw_unicode_escape' codec.

In the editor here, when answering your question, if I write \\\\
you see \\ in the response so I actually had to write 
\\\\\\\\. Try it yourself to see what I mean (or edit this answer 
to see what I mean).

Избегая обратной косой черты unicode_escapeКодек защищает от подобных проблем.

0 голосов
/ 10 мая 2019

Вы используете здесь bytes, а не bytearray Так что, если вы хотите кодировать и декодировать, сохраняя '\ x', вы можете использовать

'\x88'.encode('raw_unicode_escape')
b'\x88'.decode('unicode_escape')

Если то, что у вас есть, является единственным значениемbytearray вот так:

barray = bytearray([0x88])

вы можете получить строку этого байта следующим образом:

s = format(barray[0], '02x')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...