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

如何使用Python读写C语言生成的二进制文件中的float类型值

Python正确读写C语言生成的float类型二进制文件方案

你之前的方法错误原因有两个:

  1. C语言的float是IEEE 754单精度浮点数,固定占4字节,你只读3个字节缺少必要数据,无法完成解析
  2. 读取到的原始字节没有做浮点数格式转换,直接转成整数列表自然无法得到正确的浮点值

Python官方内置的struct模块专门用于处理C语言基础类型和Python字节序列的双向转换,使用方法如下:

读取操作

对应你给出的C代码生成的file.bin(共10个连续存储的float值),读取代码示例:

import struct

# 方式1:一次性读取所有10个float
with open("file.bin", "rb") as f:
    # 格式符说明:@表示使用本机字节序,10f表示解析10个float类型
    # 总读取长度=每个float占4字节 * 10 = 40字节
    raw_data = f.read(4 * 10)
    float_list = struct.unpack("@10f", raw_data)
    print(float_list)

# 方式2:循环逐个读取,适合文件长度未知的场景
float_list = []
with open("file.bin", "rb") as f:
    while True:
        raw_data = f.read(4)
        # 读到文件末尾结束循环
        if len(raw_data) != 4:
            break
        # unpack返回的是元组,取第一个元素就是解析后的float值
        single_val = struct.unpack("@f", raw_data)[0]
        float_list.append(single_val)
print(float_list)

写入操作

如果需要用Python生成C语言可以直接读取的float类型二进制文件,示例代码如下:

import struct

# 待写入的浮点数值列表
write_list = [1.1 * i for i in range(10)]
# 按格式打包为字节序列,*表示把列表解包为位置参数
packed_data = struct.pack("@10f", *write_list)

with open("python_output.bin", "wb") as f:
    f.write(packed_data)

注意事项

  • 字节序匹配:如果跨设备读写文件,需要确认字节序一致:格式符用<f表示小端序,>f表示大端序,替换示例中的@f即可
  • 类型匹配:C语言的double对应格式符d,占8字节,不要和float的f搞混

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 01:39:03