将字符串打印为十六进制文字python

jjhzyzn0  于 2023-08-02  发布在  Python
关注(0)|答案(4)|浏览(130)

我有很多预先存在的代码,将字节数组视为字符串,即

In [70]: x = '\x01\x41\x42\x43'

字符串
Python总是打印为:

In [71]: x
Out[71]: '\x01ABC'


这使得调试变得很痛苦,因为我打印的字符串看起来不像代码中的文字。如何将字符串打印为十六进制文字?

rvpgvaaj

rvpgvaaj1#

对于跨版本兼容的解决方案,请使用binascii.hexlify

>>> import binascii
>>> x = '\x01\x41\x42\x43'
>>> print x
ABC
>>> repr(x)
"'\\x01ABC'"
>>> print binascii.hexlify(x)
01414243

字符串
因为.encode('hex')是对encode的误用,并且已经在Python 3中删除:

Python 3.3.1
Type "help", "copyright", "credits" or "license" for more information.
>>> '\x01\x41\x42\x43'.encode('hex')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
LookupError: unknown encoding: hex

qcbq4gxm

qcbq4gxm2#

你可以试试这样的方法:

>>> x = '\x01\x41\x42\x43'
>>> x.encode('hex')
'01414243'

字符串
或者是

>>> x = r'\x01\x41\x42\x43'
>>> x
'\\x01\\x41\\x42\\x43'


或者是

>>> x = '\x01\x41\x42\x43'
>>> print " ".join(hex(ord(n)) for n in x)
0x1 0x41 0x42 0x43

irlmq6kh

irlmq6kh3#

要实际打印出字符串~literal(即你可以剪切并粘贴回你的代码中以获得相同的对象)需要如下内容:

>>> x = '\x1\41\42\43'
>>> print "'" + ''.join(["\\"+ hex(ord(c))[-2:] for c in x]) + "'"
'\x1\41\42\43'

字符串

3pmvbmvn

3pmvbmvn4#

python3中,我通常编写一个小函数来完成此操作。

def print_hex_string(data):
    result = ''

    for c in data:
        result += f'\\x{c:02x}'

    print("b'" + result + "'")

个字符
binascii是不需要的,因为你可以只做x.hex()相同的结果。

print(x.hex())
# 01414243

一行

x = b'\x01\x41\x42\x43'
print(''.join([f'\\x{c:02x}' for c in x]))
# \x01\x41\x42\x43

相关问题