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
相关产品推荐
相关产品推荐

