如何用Python将C++生成的.bin文件转为人类可读格式?
解决Python读取.bin文件并转为可读格式的问题
你的代码已经成功读取了二进制文件内容,但得到的是bytes类型的字节串,只需要解码成字符串就能得到人类可读的格式,具体方案分两种情况:
情况1:.bin文件本质是文本格式(你的示例符合这种情况)
如果C++程序是用文本模式写入的内容(比如用std::ofstream默认模式,或者明确指定std::ios::text),那.bin里的内容其实是ASCII/UTF-8编码的文本,直接用decode()方法转成字符串即可:
binary_file_path = "binary_file.bin" with open(binary_file_path, "rb") as b_file: binary_data = b_file.read() # 解码为字符串,默认用UTF-8编码,若C++用的是ASCII也兼容 readable_text = binary_data.decode('utf-8') # 或者ASCII编码,适合纯英文数字的场景 # readable_text = binary_data.decode('ascii') print(readable_text)
运行后就能输出12 MyName here 456这种可读内容。
情况2:解码报错?尝试指定对应编码
如果解码时抛出UnicodeDecodeError,说明C++写入时用了其他编码(比如Windows下的GBK、CP1252),可以尝试对应编码解码:
# 尝试GBK编码(中文Windows常见) readable_text = binary_data.decode('gbk') # 或者忽略无法解码的字符,避免报错 readable_text = binary_data.decode('utf-8', errors='ignore')
额外提醒:如果是C++结构化二进制数据
如果你的.bin文件是C用二进制模式写入的结构化数据(比如用struct打包的整数、自定义结构体),那直接解码是不行的,需要用Python的struct模块解析。比如假设C写入了一个int和字符串,示例代码大概是:
import struct binary_file_path = "binary_file.bin" with open(binary_file_path, "rb") as b_file: # 假设C++写了一个int(4字节)+ 长度为8的字符串 int_val, name = struct.unpack("<i8s", b_file.read(12)) # 字符串需要去掉末尾的空字符 name = name.decode('utf-8').strip('\x00') print(f"整数: {int_val}, 名称: {name}")
不过根据你的示例内容,大概率属于第一种文本格式的情况,先试试第一种方案即可。
内容的提问来源于stack exchange,提问作者programmer_04_03
相关产品推荐
相关产品推荐

