首页 > 解决方案 > 为什么 ByteArray() 组合数组值?(Python)

问题描述

>>> bytearray([2,88])
bytearray(b'\x02X')

为什么 bytearray() 将它们结合起来?为什么将 88 变成 ascii (X)?我期待两个单独的值,并且 88 转换为十六进制(x58)

bytearray(b'\x02,x58)

标签: pythonarrayshexbyteascii

解决方案


因为 ASCII 88(大写字母 X)是可打印的,而bytes.str()/的行为bytes.repr()是不对可打印字符进行编码。

只需尝试打印bytearray(range(256)),您就会看到有一系列可打印字符(从\x20\x7e)不会显示为\x##.

尽管如此,您可以输入\x58字节序列,但它会再次显示为X

>>> b'\x58'
b'X'

这是打印所有编码为\x##表单的值的小技巧:

>>> b = bytearray([2,88])
>>> print(''.join('\\x%02x'%x for x in b))
\x02\x58

推荐阅读