Есть несколько способов сделать это:
1. Метод hex
(python 3.5 и выше)
>>> 'K'.encode('ascii').hex()
'4b' # type str
2. Использование binascii
>>> binascii.hexlify('K'.encode('ascii'))
b'4b' # type bytes
3. Использование str.format
>>> ''.join('{:02x}'.format(x) for x in 'K'.encode('ascii'))
'4b' # type str
4. Использование format
>>> ''.join(format(x, '02x') for x in 'K'.encode('ascii'))
'4b' # type str
Примечание: Методы, использующие format
, не очень эффективны.
Если вы действительно заботитесь о \x
, вам придется использовать format
, например:
>>> print(''.join('\\x{:02x}'.format(x) for x in 'K'.encode('ascii')))
\x4b
>>> print(''.join('\\x{:02x}'.format(x) for x in 'KK'.encode('ascii')))
\x4b\x4b
Если вы заботитесь о заглавных буквах, вы можете использовать X
вместо x
, например:
>>> ''.join('{:02X}'.format(x) for x in 'K'.encode('ascii'))
'4B'
>>> ''.join(format(x, '02X') for x in 'K'.encode('ascii'))
'4B'
Прописные буквы и \x
:
>>> print(''.join('\\x{:02X}'.format(x) for x in 'Hello'.encode('ascii')))
\x48\x65\x6C\x6C\x6F
Если вы хотите bytes
вместо str
, просто закодируйте вывод в ascii
снова:
>>> print(''.join('\\x{:02X}'.format(x) for x in 'Hello'.encode('ascii')).encode('ascii'))
b'\\x48\\x65\\x6C\\x6C\\x6F'