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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 12:33:19