如何用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
相关产品推荐
相关产品推荐

