Преобразование из строки, содержащей шестнадцатеричные символы, в байты в python 3

У меня есть строка, содержащая печатные и непечатаемые символы, например:

'\xe8\x00\x00\x00\x00\x60\xfc\xe8\x89\x00\x00\x00\x60\x89'

Какой самый "питоновский" способ преобразовать это в объект bytes в Python 3, то есть:

b'\xe8\x00\x00\x00\x00`\xfc\xe8\x89\x00\x00\x00`\x89'

person Carsten Maartmann-Moe    schedule 24.02.2014    source источник
comment
Все символы находятся в диапазоне 0-255?   -  person Martijn Pieters    schedule 25.02.2014


Ответы (1)


Если все ваши кодовые точки находятся в диапазоне от U+0000 до U+00FF, вы можете кодировать в Latin-1:

inputstring.encode('latin1')

поскольку первые 255 кодовых точек Unicode сопоставляются один к одному с байтами в стандарте Latin-1.

Это, безусловно, самый быстрый метод, но он не будет работать для любых символов во входной строке за пределами этого диапазона.

По сути, если вы получили Unicode, который содержит «байты», которые не должны были быть декодированы, закодируйте в Latin-1, чтобы снова получить исходные байты.

Демо:

>>> '\xe8\x00\x00\x00\x00\x60\xfc\xe8\x89\x00\x00\x00\x60\x89'.encode('latin1')
b'\xe8\x00\x00\x00\x00`\xfc\xe8\x89\x00\x00\x00`\x89'
person Martijn Pieters    schedule 24.02.2014