2013-02-20 98 views
3

我想将Matlab工作区中的一些数据打包成一个二进制文件,然后能够在稍后的时间将这些数据恢复回工作区。 (该数据形成的遥测数据日志的标题的一部分。这是非常有用的,该文件中直接产生的遥测数据。)如何将Matlab工作区数据打包到二进制文件中?

我知道,loadsave命令将做的正是这一点,但我认为我的病情是独特的。一旦我将工作区数据保存到文件中,我有另一个程序(用C编写)打开文件并将遥测数据附加到文件。我不认为loadsave将处理此问题。

我已经使用Mathworks File Exchange上的cstruct工具将数据打包到blob中,并使用fwrite将其写入文件,从而部分解决了该问题。使用这种方法的警告是cstruct在解包时必须知道打包格式。数据的格式已经发生变化,并且可能会再次发生变化,因此删除此要求会很好。

理想情况下,我想写一个字节数X到文件头,然后是包含MAT格式数据的二进制BLOB(大小为X),接着是可变大小的遥测数据块。当我想解包数据时,我读取X字节的数据,将其解释为MAT文件,并且它奇迹般地出现在工作区中。

是否有包装的工作空间变量为二进制的blob,然后没有他们的结构,的先验知识,但二进制数据存储为一个较大的文件的一部分拆包他们的一种方式?

编辑:添加说明,我不认为loadsave是我所需要的。

回答

3

Matlab的save命令正是你想要的。要再次加载变量,请使用load

更新:现在我明白你想要做什么。我最好的想法是使用save创建一个.mat文件,然后将该文件嵌入到您的自定义二进制文件中(只需复制字节)。要恢复Matlab数据,请提取这些字节以创建一个新的.mat文件,然后使用load。这种方法很好,因为你只需要最小的二进制格式,它将处理任何 Matlab数据。

奖励提示:临时.mat文件的好地方在tempdir

+0

感谢您的建议,shoelzer。我认为从我原来的措辞来看并不清楚,但我希望将打包的数据嵌入到更大的二进制文件中。我不认为“保存”和“加载”这样做。我编辑了我的问题,使这个消息更加清晰。 – 2013-02-20 03:48:03

+1

@RyanEdwards明白了。我更新了我的答案。 – shoelzer 2013-02-20 04:00:54

+0

这正是我想到的解决方案,虽然我希望没有临时文件的解决方案。 – 2013-02-20 04:04:54

相关问题