2010-04-06 132 views
2

我读过“在Matlab中读写二进制文件”这篇文章,但我仍然有疑问。我在C与FWRITE创建长双值的二进制文件,并在Matlab我使用将C写入的二进制文件导入到Matlab中

fid = fopen('vz3.dat', 'r') 
mydata = fread(fid, 'double') 

其中vz3.dat是我的文件。但是我在Matlab中获得了垃圾值。根据

[cinfo, maxsize, ordering] = computer 

在Matlab中,我的电脑是一个小端系统(字节排序系统)。有什么建议么?

顺便说一下,二进制文件必须以.bin结尾。我使用.dat扩展名。这样做可以吗?

非常感谢

+0

根据我的经验,二进制文件可以以任何你想要的方式结束。我使用.raw进行一些数据处理。使用.dat或.bin可能有助于避免混淆。 – Doresoom 2010-04-06 16:53:57

+0

谢谢。我不知道为什么下意识地去了dat :​​) – yCalleecharan 2010-04-06 17:53:19

回答

3

要打开小端文件,请使用

fid = fopen('vz3.dat','r','l'); 

不要紧,什么文件被调用时,顺便说一句。

+0

谢谢。现在它正在工作。我用过:format long; fid = fopen('vz3.dat','r','l'); mydata = fread(fid,'double')。请参阅我的其他帖子“二进制文件打印和所需的精度”。它说Matlab可以处理双倍但不长的双倍。 – yCalleecharan 2010-04-06 16:21:47

+0

@yCalleecharan:'long double'不是标准的精确名称。假定你的意思是你的C++编译器使用(实现相关的)C++数据类型'long double'的表示形式?需要更多地了解你的工具链,但通常的嫌疑人是64位IEEE和80位x87格式。 – 2013-02-01 16:20:53

0

如果您必须使用其他地方打开的文件句柄,则还可以使用machineformat参数至fread(这是可选的)。

该文档可用on the MathWorks site