Python 3中如何将原始二进制文件内容输出为原始十六进制?
解决二进制文件转十六进制(每次处理32字节)的方案
嘿,我懂你现在的头疼点——那些记事本里的乱码完全看不出头绪,不过咱们直接用Python就能精准搞定这个需求,读取原始二进制数据、转成十六进制输出,还能严格每次处理32字节。
下面是直接能用的代码,我会一步步给你解释:
import binascii # 替换成你的二进制文件路径 file_path = "your_binary_file.bin" with open(file_path, 'rb') as f: while True: # 每次读取32字节 chunk = f.read(32) if not chunk: break # 读取完毕,退出循环 # 将二进制块转成大写十六进制字符串 hex_str = binascii.hexlify(chunk).decode('utf-8').upper() # 如果你想让十六进制每两个字符(一个字节)之间加空格,方便阅读,可以用下面这行替代上面的hex_str # hex_str = ' '.join(f"{byte:02X}" for byte in chunk) print(hex_str)
关键细节说明:
- 二进制模式打开:用
'rb'模式打开文件是核心,这样才能直接读取原始的二进制字节,而不是尝试用某种编码去解析(这也是记事本乱码的原因——它默认用ASCII/UTF-8去解析非文本的二进制数据)。 - 每次32字节读取:
f.read(32)会每次从文件里读取最多32字节,直到文件末尾,最后一次可能不足32字节,代码也能自动处理。 - 十六进制转换:
binascii.hexlify()会直接把二进制字节转成十六进制的字节串,再用decode('utf-8')转成字符串,upper()确保输出是大写的(比如AA而不是aa)。- 如果你想要更灵活的格式(比如每个字节之间加空格),用列表推导式
' '.join(f"{byte:02X}" for byte in chunk)会更方便,02X表示格式化两位大写十六进制,不足两位补0。
如果需要把结果保存到文件而不是打印出来,只需要把print(hex_str)改成写入文件的操作就行,比如:
with open("output_hex.txt", 'w') as out_f: out_f.write(hex_str + '\n')
这样处理下来,你就能得到完全符合需求的十六进制输出,每一行对应原文件里的32字节内容~
内容的提问来源于stack exchange,提问作者CodeMonkey
相关产品推荐
相关产品推荐

