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

Python中如何将十六进制字符串转换为指定格式的bytes列表

解决方案

首先明确底层原因:Python 中 bytes 类型的默认字符串表示规则为:取值落在可打印 ASCII 范围(0x20~0x7E)的字节会直接显示为对应字符,其余字节才会显示为 \xHH 格式的转义符。你用 bytes.fromhex()、binascii.unhexlify() 生成的 bytes 对象本身是完全正确的,只是默认显示逻辑不符合你的要求。

如果需要生成你指定的显式字节列表格式,可以用以下两种方案:

方案1:直接生成格式化字符串(适合临时生成可复用的代码片段)

该方案可以直接输出你需要的格式字符串,复制后可直接作为 Python 代码使用,和原生 bytes 对象完全等价:

hex_str = "a5acf29e4d11f20b6dee54bf369ee0f8"
# 每两位分割十六进制串,生成0x前缀的字节表示
byte_parts = [f"0x{hex_str[i:i+2]}" for i in range(0, len(hex_str), 2)]
# 拼接为目标格式
format_result = f"bytes([{', '.join(byte_parts)}])"

print(format_result)

运行后输出结果为:
bytes([0xa5, 0xac, 0xf2, 0x9e, 0x4d, 0x11, 0xf2, 0x0b, 0x6d, 0xee, 0x54, 0xbf, 0x36, 0x9e, 0xe0, 0xf8])

方案2:自定义bytes子类(适合需要长期用该格式打印bytes的场景)

如果希望后续操作中该类字节对象打印时自动显示为指定格式,同时保留原生bytes的所有功能,可以重写__repr__方法实现:

class ExplicitBytes(bytes):
    def __repr__(self):
        byte_parts = [f"0x{b:02x}" for b in self]
        return f"bytes([{', '.join(byte_parts)}])"

# 转换生成的bytes为自定义类型
hex_str = "a5acf29e4d11f20b6dee54bf369ee0f8"
b = ExplicitBytes(bytes.fromhex(hex_str))

print(b)

该自定义类对象可以完全替代原生bytes使用,支持所有原生bytes的方法和运算。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 03:54:07