python - 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)
问题是一样的。
解决方案
你bytearray
的表示为一个字符串。当为人眼表示字符串时,字符将根据当前编码(ASCII
、utf-8
等)显示。在您当前的编码中,具有值的字符0x23
是哈希符号 ( #
)。仅对于没有字符表示(0x00
等)的字节,才会显示十六进制表示(例如\x00
)。
所以你看到的是绝对正确的,因为你要求(也许不知道)你的字节数组的字符串表示。
如果要查看每个字节的十六进制值,请使用data1.hex()
. 这将为每个字节创建一个十六进制表示并将所有这些连接起来。结果将是一个仅包含十六进制数字(0-9
和a-f
)的字符串。这仅对打印有用,在大多数情况下对进一步处理没有用。
在 Python3 中,请考虑bytes([0x00, 0x01, ...])
改用。这将产生一个bytes
更原生于该语言的对象(例如,许多函数,如write()
,send()
等将接受它作为输入)。它也有hex()
如上所述的方法。
推荐阅读
- java - 将行为添加到 Wicket 选项卡
- c# - 获取 VS 2017 中列出的 C# 7.3
- php - 我有一个下面的数组,其中一些相同的键具有不同的值。如何在 PHP 中将相同的键值与该键组合?我正在使用 WAMP,Codeigniter
- scala - `org.quartz.core.jobrunshell throw an unhandled exception`异常的原因是什么?
- spring - 使用 Spring + Jedis 设置时,排序集如何存储在 redis 中?
- image-processing - 更改区域 ImageMagick 的颜色
- heroku - 在 heroku 上使用 fabric.js 部署一个 Angular 6 应用程序
- java - 查询 Firestore 数据并为所有匹配查询的文档添加一个字段
- python - matplotlib 嵌入在 wxPython 中,带有导航工具栏坐标
- c# - ASP.NET Entity Framework 模型的 Designer.cs 文件充满错误