ByteArray不显示十六进制数字Python

时间:2018-07-23 14:34:56

标签: python arrays python-3.x

我正在处理从Python的UDP数据包中提取的字节数组。

数据表示如下:

data = [0x00,0x01,0x23,0x84,0xa6]

当我使用bytearray(data)并打印其内容时,提示会向我显示一个非十六进制的数字,例如x01#或带有其他数据内容的#数字,将其替换为{{1} } 数字。我真的不知道为什么会这样。

完整的代码示例

\n

印刷品显示

data = [0x00,0x01,0x23,0x84,0xa6]

data1 = bytearray(data)

print(data)
print(data1)

使用[0, 1, 35, 132, 166] bytearray(b'\x00\x01#\x84\xa6') 的问题是相同的。

1 个答案:

答案 0 :(得分:3)

您的bytearray用字符串表示。当用人眼表示字符串时,将根据当前编码(ASCIIutf-8等)显示字符。在您当前的编码中,值为0x23的字符是一个哈希符号(#)。仅针对不具有字符表示形式的字节(0x00等)显示十六进制表示形式(例如\x00)。

所以您看到的是绝对正确的,因为您要求(也许不知道)字节数组的字符串表示形式。

如果要查看每个字节的十六进制值,请使用data1.hex()。这将为每个字节创建一个十六进制表示并将所有这些连接起来。结果将是一个仅包含十六进制数字(0-9a-f)的字符串。这仅对打印有用,在大多数情况下对进一步处理没有帮助。

在Python3中,请考虑改用bytes([0x00, 0x01, ...])。这将产生一个bytes对象,该对象对于该语言而言更本地化(例如,许多功能,例如write()send()等将其接受为输入)。它还具有如上所述的hex()方法。