python - 如何在开头用“b”解码十六进制字符串?
问题描述
我有一个像这样的十六进制字符串:
s = '\x83 \x01\x86\x01p\t\x89oA'
我像这样解码为十六进制值,得到以下输出。
>>> ' '.join('{:02x}'.format(ord(ch)) for ch in s)
'83 20 01 86 01 70 09 89 6f 41'
但是现在我在解码与前一个完全相同的十六进制字符串时遇到了问题,但这来自二进制文件。并b
在开头有一个。下面的错误:
with open('file.dat', 'rb') as infile:
data = infile.read()
>>> data
b'\x83 \x01\x86\x01p\t\x89oA'
>>> ' '.join('{:02x}'.format(ord(ch)) for ch in data)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <genexpr>
TypeError: ord() expected string of length 1, but int found
如何解决这个问题?谢谢
解决方案
.hex()
改为对字节字符串使用方法。
In [25]: data = b'\x83 \x01\x86\x01p\t\x89oA'
In [26]: data.hex()
Out[26]: '83200186017009896f41'
推荐阅读
- javascript - 未选中复选框时如何更改标签标签的文本
- python - 具有相同类型属性的类的类型注释?
- android-studio - 无法从 sqldelight v1.4.1 访问生成的数据库类
- django - Django 错误日志仅在调试模式下工作
- sql - SQL (Hive):在使用 GROUP BY 进行聚合时使用窗口函数
- html - 调整容器大小时使用 HTML 和 CSS 缩写标题
- vb.net - 列表
循环短 - c++ - GTSAM Segfault - 可能的对齐问题?
- javascript - 即使其中一个承诺被拒绝,也不要让整个任务失败
- scala - 将列表转换为 Scala 中的设置