首页 > 解决方案 > ByteArray 不显示十六进制数字 Python

问题描述

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

它表示的数据如下:

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

当我使用bytearray(data)并打印它的内容时,提示会向我显示一个非十六进制数字,如x01#或与其他数据内容一样,该#数字将被数字替换\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')

使用bytes(data)问题是一样的。

标签: pythonarrayspython-3.x

解决方案


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

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

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

在 Python3 中,请考虑bytes([0x00, 0x01, ...])改用。这将产生一个bytes更原生于该语言的对象(例如,许多函数,如write(),send()等将接受它作为输入)。它也有hex()如上所述的方法。


推荐阅读