我正在解析一个二进制数据文件,其中包含一个定义良好的标题(这个数据类型有很多字节,后面跟着这个其他数据类型的多个字节)。它就像这样
0-2: 3 chars
3 : 1 unsigned short
4-6: 24-bit unsigned integer
...
与我不同的部分是在Matlab中这样做。在理想的世界中,我想直接将这个头读入一个结构,然后解析后面的二进制数据,然后解析下一个头。
是否有一个I / O函数可以读入正确对齐和大小的结构,就像在C中可以做到的那样?我认为情况并非如此,我需要编写一个函数来读取标题的每个部分并将它们组合成一个结构。
解析文件或网络协议标头的示例将是分享的良好链接。谢谢!
答案 0 :(得分:2)
Ratbert在他的评论中明确地得到了它,matlab结构与c结构无关。没有办法将matlab结构的字段直接映射到内存,就像在matlab中完成一样。简单的答案是否定的。
通常的方法是在m中创建结构,对于99%的情况,这是正确的选择。此外,在Matlab中,所有结构都是数组,因此您可以将所有数据包放入一个结构中,例如使用以下结构对其进行索引:
packets(3).from_ip % Ip of the third packet
packets(9).payload(23:49) %bytes 23 to 49 of packet 9
只是为了让您了解Matlab中经过深思熟虑的数据结构是如何形成的。
还有1%的案例,特别是难以在matlab中解压缩的格式或一些性能非常严重的案例。在这些情况下,您可以编写一个mex函数,它基本上是一个C(++)函数,可以像matlab函数一样调用。但请记住,mex函数不能返回c-structs。您必须将数据重新打包到相应的matlab数据类型中。这样做没有自动性。