【问题标题】:Understanding how to read and write different formats to a binary file in matlab了解如何在matlab中读取和写入不同格式的二进制文件
【发布时间】:2016-12-18 22:29:20
【问题描述】:

我正在尝试了解如何在 matlab 中读取和写入多种类型,但我真的不知道我哪里出错了。

例如,假设我想将一个字符串和一个双精度值写入二进制文件。

my_string='hello world';
my_double=4.45;

fid=fopen('test.bin','wb');
fwrite(fid,my_string,'char');
fwrite(fid,my_double,'double');
fclose(fid);

现在我想读回那个字符串并加倍。我看到的第一个方法是有人建议将整个文件加载到一个字节数组中并一次读取块。然而,这样做并没有给我任何帮助。

fid=fopen('test.bin','rb');
my_data=fread(fid);
    my_data=[]

my_data 只是一个空白数组。

我尝试的另一件事是读取具有大小的数据。

my_data=fread(fid2,size(my_string),'char')
    my_data=[]

这也给了我一个空白数组。即使将其作为整数读入也行不通。

那么我怎样才能编写混合类型以便稍后回读呢?

【问题讨论】:

  • 可能只是一个错字,但在您最后的fread 声明中,您正在阅读fid2 而不是fid ...您可能想检查一下。
  • 顺便说一句,您的示例中的my_data=[] 行是您的代码的实际部分还是只是您显示输出的方式?如果它是您的代码的一部分,那是您的问题,您将一个空数组分配给my_data,在读取文件数据后覆盖所包含的任何变量。

标签: matlab file binary


【解决方案1】:

首先,像你一样写作:

my_string='hello world';
my_double=4.45;

fid=fopen('doubletest.bin','wb');
fwrite(fid,my_string,'char');
fwrite(fid,my_double,'double');
fclose(fid);

然后读取 char 和 double

fid2=fopen('doubletest.bin','rb');
my_data=fread(fid2,size(my_string),'*char');
my_data
my_data=fread(fid2,size(my_double),'*double');
my_data
% my_data=fread(fid2);
% my_data

输出是

my_data =

hello world


my_data =

    4.4500

【讨论】:

  • 但这适用于格式化文件?不幸的是,由于空间问题,我不得不使用二进制文件。
  • 这真的什么都回答不了。问题是专门要求读写二进制文件,而不是纯文本文件。无论如何,您也只是指写作部分。
  • @Bernhard 我不在,编辑了二进制读/写的答案,你现在可以删除你的反对票吗?
  • @Bernhard 也为 double 添加了答案
  • @be_good_do_good 很好,我编辑了一点清理,如果您不同意,请随时恢复。
猜你喜欢
  • 2010-09-17
  • 2015-04-26
  • 2014-06-28
  • 2016-03-03
  • 1970-01-01
  • 2020-05-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多