You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python3如何将ASCII十六进制形式的字节描述字符串转换为实际字节

Python3 十六进制字面量字符串转字节对象方法

问题场景

需要将仅由ASCII十六进制字符(0-9、a-f、A-F)组成、用于描述字节值的字面量字符串,转换为对应的真实字节对象,不能直接按ASCII编码规则对字符串本身做编码。典型场景为PDF内容提取:

待转换的纯十六进制字符串示例:
00180012001a001b...
从PDF内容流中提取的典型原始数据结构如下:

# PDF原始文本片段
original = '[ <00010002> 1 <000300040005> 1.00708 <00060007> ] TJ'
# 提取尖括号内的内容拼接得到的纯十六进制串
parsed = '0001000200030004000500060007'

# 错误做法:会把每个十六进制字符本身按ASCII编码,得不到目标字节
bparsed_wrong = parsed.encode('ascii')

这类字符串天然可按每2个字符对应1个字节、每4个字符对应1个16位单元的规则拆分,转换完成后可进一步匹配对应编码(如PDF常用的WinAnsiEncoding)完成解码。

原生实现方案

直接使用Python3内置的bytes.fromhex()类方法即可,该方法是标准库原生提供的实现,简洁鲁棒,无第三方依赖:

parsed = '0001000200030004000500060007'
# 核心转换逻辑
bparsed = bytes.fromhex(parsed)

# 转换结果验证
print(bparsed)
# 输出:b'\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07'

方法特性说明

  • 自动忽略输入字符串中的所有空白字符(空格、换行、制表符等),如果提取的十六进制串存在多余空白,无需提前做清洗处理
  • 输入字符串长度必须为偶数,否则会抛出ValueError,如果遇到长度为奇数的串,需要检查提取逻辑是否存在字符遗漏,或按需补前导0
  • 转换得到的字节对象是真实的字节值序列,后续可直接尝试对应编码做解码。注意:不建议用chardet识别这类PDF片段的编码,PDF文本编码通常和字体对象的编码标识绑定,chardet对多编码混合的短字节串识别准确率极低。

内容的提问来源于stack exchange,提问作者Chris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 23:18:21