Python字节数组打印

32

我在Python中有一个整数列表,应该对应以下int值(可以更改为十六进制字节值):

[10, 145, 140, 188, 212, 198, 210, 25, 152, 20, 120, 15, 49, 113, 33, 220, 124, 67, 174, 224, 220, 241, 241]

但是,当我使用bytearray(nameOfList)将该列表转换为字节数组时,我获得以下输出。

bytearray(b'\n\x91\x8c\xbc\xd4\xc6\xd2\x19\x98\x14x\x0f1q!\xdc|C\xae\xe0\xdc\xf1\xf1')

无论这个字节数组打印出来的样子如何,我都可以从中提取正确的值,但是难道字节数组的打印输出不应该对应于字节数组的十六进制值吗?(我的意思是,它似乎大部分遵循十六进制值,直到 \x0f 之后开始输出无意义的东西...)


1
在我看来,它看起来很好。只要可能,它就将字节呈现为ASCII字符。在\x0f之后,您有49='1'和113='q'等。http://www.asciitable.com/ - axblount
1
仅表示非打印字符为\x.. - mgilson
1
list(your_bytearray) == your_list 的意思是将 your_bytearray 转换成列表后与 your_list 进行比较。 - jfs
4个回答

39
>>> x = bytearray(b'\n\x91\x8c\xbc\xd4\xc6\xd2\x19\x98\x14x\x0f1q!\xdc|C\xae\xe0
\xdc\xf1\xf1')
>>> import binascii
>>> print(binascii.hexlify(x))
0a918cbcd4c6d2199814780f317121dc7c43aee0dcf1f1

如果你想将所有内容打印为十六进制字符串,请使用binascii

正是我所需要的。 - uhoh

18

使用 bytes.hex()

>>> x = bytearray([0x01,0x02,0xff])
>>> print(x.hex())
0102ff

1
这好多了。 - étale-cohomology

12

我认为这看起来很好。它只是尽可能将字节呈现为ASCII字符。在15=\x0f之后,您有49='1'和113='q'等。

请参见http://asciitable.com


有没有办法关闭这种行为?当你处理二进制数据时,这真的很烦人。 - Peter

2

在大尺寸下,这可能不太高效,但我发现这样更易于阅读:

buff = bytearray(list(range(10)))
print(buff)
print(", ".join(hex(b) for b in buff))

打印

bytearray(b'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t')
0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接