【问题标题】:Reading binary file header into Matlab struct将二进制文件头读入 Matlab 结构
【发布时间】:2015-08-30 04:34:49
【问题描述】:

我正在解析一个包含定义非常明确的标头的二进制数据文件(此数据类型有这么多字节,其他数据类型有这么多字节)。是这样的

0-2: 3 chars
3  : 1 unsigned short
4-6: 24-bit unsigned integer
...

对我来说陌生的部分是在 Matlab 中执行此操作。在一个理想的世界里,我想把这个header直接读入一个struct,然后解析后面的二进制数据,然后解析下一个header。

是否有一个 I/O 函数能够像在 C 中那样读取正确对齐和大小的结构?我认为情况并非如此,我需要编写一个函数来读取标头的每一部分并将其拼凑成一个结构。

文件或网络协议标头的解析示例将是很好的共享链接。谢谢!

【问题讨论】:

  • 注意“结构”这个词。它在 Matlab 中的含义与在 C 中的含义完全不同。话虽如此,我认为没有内置函数可以做到这一点。您可以自行解析二进制数据。
  • 我也很怀疑,但很高兴与专家核实以确保我没有错过其他选项。谢谢拉特伯特和@daniel

标签: matlab struct


【解决方案1】:

Ratbert 基本上在他的 cmets 中得到了它,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 结构。您必须将数据重新打包到相应的 matlab 数据类型中。这样做没有自动性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-22
    • 2017-12-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-28
    • 1970-01-01
    • 2011-12-24
    相关资源
    最近更新 更多