从用C创建的二进制文件中读取double的最佳方法是什么?

2024-09-27 01:30:01 发布

您现在位置:Python中文网/ 问答频道 /正文

一个C程序将连续的双精度输出到一个二进制文件中。我想把它们读入Python。我试着用struct.unpack('d',f.read(8))

编辑: 我用C语言写了一个随机双数

r = drand48();
fwrite((void*)&r, sizeof(double), 1, data);

错误现在已修复,但我无法读取第一个值。总共0.000。。它的读数是3.90798504668055,但其余的都很好。


Tags: 文件程序编辑readdata二进制精度struct
3条回答

我认为你确实读对了号码,但被显示屏弄糊涂了。当我从您提供的文件中读取数字时,我得到“3.907985046680551e-14”-这几乎是零,但不完全是零(0.000000000000039以展开形式)。我怀疑你的C代码只是打印的精度比python低。

[编辑]我刚刚尝试用C读取文件,得到了相同的结果(虽然精度略低:3.90799e-14)(使用printf(“%g”,val)),所以我认为如果这个值不正确,它发生在写入端,而不是读取端。

首先,你试过pickle吗? 还没有人显示任何Python代码。。。下面是一些用python读取二进制文件的代码:

import Numeric as N
import array
filename = "tmp.bin"
file = open(filename, mode='rb')
binvalues = array.array('f')
binvalues.read(file, num_lon * num_lat) 
data = N.array(binvalues, typecode=N.Float)   

file.close()

其中f指定了单精度、4字节浮点数字。找到每个条目的数据大小并使用它。

对于非二进制数据,可以执行以下简单操作:

   tmp=[]
   for line in open("data.dat"):
                tmp.append(float(line))

你能详细说明“没用”吗?命令崩溃了吗?数据出了问题吗?到底发生了什么?

如果命令崩溃:

  • 请共享命令的错误输出

如果数据是错误的:

  • 创建和读取数据的系统是否具有相同的端点?如果一个是big endian,另一个是little endian,则需要在格式字符串中指定endianness转换。

  • 如果两台计算机的端部相同,数据是如何写入文件的,确切地说是?你知道吗?如果这样做了,那么写入文件的值是多少?您得到的不正确值是多少?

相关问题 更多 >

    热门问题