【问题标题】:importing C written binary files into Matlab将 C 编写的二进制文件导入 Matlab
【发布时间】:2011-02-04 21:21:52
【问题描述】:

我已经阅读了“在 Matlab 中读取和写入二进制文件”的帖子,但我仍然有疑问。我在 C 和 Matlab 中使用 fwrite 创建了一个长双精度值的二进制文件,我正在使用

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

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

[cinfo, maxsize, ordering] = computer

在 Matlab 中,我的计算机是 little-endian 系统(字节排序系统)。有什么建议吗?

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

非常感谢

【问题讨论】:

  • 根据我的经验,二进制文件可以以任何你想要的结尾。我使用 .raw 进行一些数据处理。不过,使用 .dat 或 .bin 可能有助于避免混淆。
  • 谢谢。我不知道为什么我会下意识地选择 dat :​​)

标签: matlab file-io binary binaryfiles


【解决方案1】:

要使用小端序打开文件,请使用

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

顺便说一句,调用什么文件并不重要。

【讨论】:

  • 谢谢。现在它正在工作。我用过:格式长; fid = fopen('vz3.dat', 'r','l'); mydata = fread(fid, 'double').请参阅我的另一篇文章“二进制文件打印和所需精度”。它说Matlab可以处理double但不能处理long double。
  • @yCalleecharan:long double 不是标准精度名称。大概您的意思是您的 C++ 编译器对(依赖于实现的)C++ 数据类型long double 使用的表示?需要了解有关您的工具链的更多信息,但通常怀疑是 64 位 IEEE 和 80 位 x87 格式。
【解决方案2】:

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

文档可通过on the MathWorks site获取。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    • 2013-08-18
    • 2017-01-26
    • 1970-01-01
    • 2013-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多