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

如何用Python读取C++通过ostream.write写入的二进制文件

读取C++二进制写入int数据的Python方法

正确代码实现

import struct

with open("out.txt", "rb") as f:
    # 获取当前系统中C++ int类型的字节数
    int_byte_size = struct.calcsize('i')
    # 循环读取完整的int字节块
    while (byte_block := f.read(int_byte_size)):
        # 将二进制字节解析为int值
        val = struct.unpack('i', byte_block)[0]
        print(val)

原代码无法正确读取的原因

C++的ostream.write是把int的原始二进制字节写入文件,不是文本格式。你之前的代码逐字节读取并打印,得到的只是单个字节的二进制表示(比如b'\xd2'),并没有将多个字节组合成完整的int数值。

关键细节说明

  • struct模块是Python处理C/C++二进制数据的标准工具:
    • struct.calcsize('i')会自动匹配当前系统中C语言int的字节数,和C++的sizeof(int)完全一致。
    • struct.unpack('i', byte_block)将读取到的二进制字节块解析为对应的int值,unpack返回元组,因此取索引0得到单个数值。
  • 字节序兼容:如果读写程序运行在不同架构的机器上(如x86小端和ARM大端),需要显式指定字节序,例如用'<i'表示小端,'>i'表示大端,'=i'表示系统原生字节序(默认使用该模式,同架构下无需额外指定)。
  • 必须用rb模式打开文件:二进制读取模式避免了文本模式下的换行符转换、编码处理等干扰,确保读取到原始字节数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 14:50:32