Ошибка кодирования строки в шестнадцатеричный модуль .by encode (), но не удалось - PullRequest
0 голосов
/ 29 марта 2019

Неверный результат при кодировании

Я пытался преобразовать строку в байт в шестнадцатеричном формате с помощью encode (), но безуспешно. Ниже приведен мой код, я ожидал, что \ xFF станет \ xFF, но в итоге получится \ xc3.

Могу ли я знать, почему?

Ввод: x ="\x00\x00\xFF\x00\xFF\x00"

Ввод: x.encode()

Выход: b'\x00\x00\xc3\xbf\x00\xc3\xbf\x00'

Ответы [ 2 ]

2 голосов
/ 29 марта 2019

Кодировка по умолчанию для string.encode () - UTF-8.UTF-8 кодирует символы с числовыми десятичными кодами 0-127 в качестве их числовых значений.Он кодирует значения больше 127 в виде двух или более байтов в зависимости от кодируемого символа.

Кодировка UTF-8 для 0 равна 0. Кодировка UTF-8 для '\ xFF' (255) равна '\xc3 \ xbf '.

Таким образом, если вы замените свой ввод кодировкой UTF-8 для каждого из 6 байтов в этом входе, вы получите свой вывод.

0 голосов
/ 30 марта 2019

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

>>> x ="\x00\x00\xFF\x00\xFF\x00"
>>> ba = bytearray(ord(b) for b in x)
>>> bytes(ba)
b'\x00\x00\xff\x00\xff\x00'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...