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

二进制模式读文件后,如何按全十六进制转义格式打印字节串?

问题描述

用HxD查看文件内容,得到十六进制序列为 30 82 01 22 30;使用以下Python代码以二进制模式(rb)读取该文件的5个字节:

with open("{filename}", "rb") as f:
    byte = f.read(5)
    print(byte)

执行后打印结果为 b'0\x82\x01"0',但期望输出格式为 b'\x30\x82\x01\x22\x30'。已知\x22对应ASCII码34(双引号),请问如何调整实现预期打印效果?

解决方案

Python默认打印bytes对象时,会将可打印的ASCII字符直接显示(比如0x30对应字符'0',0x22对应双引号"),仅对不可打印字符使用\xXX转义格式。要让所有字节都以\xXX的形式输出,需要手动格式化输出内容,以下是两种可行方法:

方法一:手动构造转义字符串

遍历bytes对象的每个字节,将每个字节格式化为\x{:02x}的形式,再拼接成完整的bytes字面量格式字符串:

with open("{filename}", "rb") as f:
    byte_data = f.read(5)
    # 构造每个字节的\xXX格式字符串
    escaped = ''.join([f'\\x{byte:02x}' for byte in byte_data])
    # 拼接成b'...'格式的字符串并打印
    print(f"b'{escaped}'")

方法二:使用binascii模块辅助转换

利用binascii.hexlify将bytes转换为十六进制字符串,再拆分后拼接成\xXX格式:

import binascii

with open("{filename}", "rb") as f:
    byte_data = f.read(5)
    # 将bytes转为十六进制字符串(如b'3082012230')
    hex_str = binascii.hexlify(byte_data).decode()
    # 每两个字符拆分并添加\x前缀
    escaped = ''.join([f'\\x{hex_str[i:i+2]}' for i in range(0, len(hex_str), 2)])
    print(f"b'{escaped}'")

两种方法执行后,都会输出b'\x30\x82\x01\x22\x30',符合预期格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 08:35:10