我正在处理从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')
的问题是相同的。
答案 0 :(得分:3)
您的bytearray
用字符串表示。当用人眼表示字符串时,将根据当前编码(ASCII
,utf-8
等)显示字符。在您当前的编码中,值为0x23
的字符是一个哈希符号(#
)。仅针对不具有字符表示形式的字节(0x00
等)显示十六进制表示形式(例如\x00
)。
所以您看到的是绝对正确的,因为您要求(也许不知道)字节数组的字符串表示形式。
如果要查看每个字节的十六进制值,请使用data1.hex()
。这将为每个字节创建一个十六进制表示并将所有这些连接起来。结果将是一个仅包含十六进制数字(0-9
和a-f
)的字符串。这仅对打印有用,在大多数情况下对进一步处理没有帮助。
在Python3中,请考虑改用bytes([0x00, 0x01, ...])
。这将产生一个bytes
对象,该对象对于该语言而言更本地化(例如,许多功能,例如write()
,send()
等将其接受为输入)。它还具有如上所述的hex()
方法。