【问题标题】:Matlab Parse Binary FileMatlab解析二进制文件
【发布时间】:2012-11-09 20:32:33
【问题描述】:

我希望加快从二进制转换的数据文件的读取速度(我的理解是“二进制”可能意味着很多不同的东西 - 我不知道我有什么类型的二进制文件,只是它是一个二进制文件)到纯文本。不久前我研究了快速读取文件,并被告知读取/解析二进制文件比文本更快。因此,我想解析/读取二进制文件(已转换为纯文本)以加快程序速度。

我在这个项目中使用 Matlab(我有一个需要文件中数据的 Matlab“程序”)。我想我需要一些关于二进制不同“类型”的信息,但我真的想要关于如何读取/解析所述二进制文件的信息(我知道我在寻找纯文本,所以我想我需要转换将其转换为二进制,搜索文件,然后将结果提取为纯文本)。该文件是一个日志文件,如果有任何帮助的话。

谢谢。

【问题讨论】:

  • 真的,如果不了解输入和输出文件的性质,以及查看代码来评估已经完成的工作,就无法回答这个问题。
  • 这会回到二进制文件的“类型”吗?我不熟悉二进制文件,所以我不明白“二进制”(一和零)的东西如何有不同的“类型”。就像我说的,我不知道我的日志文件格式的所有细节,但我希望在周末整理一些东西,可以在周一的工作中进行修改,以匹配我的日志文件的具体细节。跨度>
  • 不不不,一切最终都代表1s和0s,所以这个说法太笼统了。 “二进制”文件意味着数据以原始格式而不是文本 ASCII 格式写入。例如,数字 28 将被写入文件中,例如 1 个字节,其值为 0x1C(等于 28),而不是包含字符 2 和 @ 的 ASCII 值的两个字节987654326@,即0x32 0x38。你清楚吗?
  • 我了解所有文件实际上都是二进制文件。我知道如果我尝试用 Notepad++ 打开一个二进制文件,它看起来就像垃圾一样。但是我不想让二进制文件自己可读,我希望我的计算机程序(在Matlab中)解析并找到某些东西(关键字等),然后提取适当的信息并将其转换为明文以供使用由程序。所以,我可能正在寻找短语“案例 1”,以二进制形式(无论可能是什么),然后提取案例 1 的信息。
  • 好的。那么如何解析文件呢?如果你想加快你的代码速度,你必须先显示 post 给其他人看。

标签: parsing matlab binary


【解决方案1】:

您所询问的内容有几个问题 - 但是,您需要知道您正在阅读的文件的格式。如果您可以说“在位置 xx,我可以期望找到数据 yy”,那就是您需要知道的。在您的问题/cmets 中,您谈论搜索字符串。你也可以这样做(很像一个文本文件)“当我在文件中找到 xxxx 时,给我以下数据,直到第 n 个字符,或者直到下一个 yyyy”。

您想查看fread 的文档。在文档中有可以帮助您入门的代码 sn-ps,但正如我(和其他人)所说,您需要知道二进制文件的格式。如果您不顾一切,可以使用十六进制编辑器来确定一些信息,但输出这些文件的程序的文档应该更快。

关于不同的“二进制文件”,最低有效字节在前或 LSB 在后。对于这项工作,你真的不需要知道这一点。还有其他与平台相关的问题,我几乎可以肯定您不需要了解(除非您将二进制文件从 Mac 移动到 PC 到 unix 机器)。如果您阅读了fread 文档的几乎底部,则有一个标题为“阅读在其他系统上创建的文件”的部分讨论了这些问题以及如何处理它们。

我必须做的另一条评论,你说“读取/解析二进制文件比文本更快”。这不是真的(或者即使是这样,您也很可能不会注意到性能提升)。然而,就开发时间而言,读取/解析文本文件将为您节省大量时间。

【讨论】:

  • 谢谢!不是我想要的(就速度而言不是更快),但仍然非常感谢。
【解决方案2】:

在二进制文件中存储数据的简单方法是使用“保存”命令。 如果从保存的变量加载,它应该比从文本文件加载要快得多。

【讨论】:

  • 我已经有了二进制文件(嗯,它在工作)。如果我必须在星期一与某人讨论如何生成二进制文件,我会的,但我希望本周末尝试开发一些代码,以便在星期一有一个起点。
猜你喜欢
  • 2015-06-21
  • 1970-01-01
  • 2020-05-21
  • 1970-01-01
  • 2021-12-21
  • 1970-01-01
  • 1970-01-01
  • 2021-05-19
  • 2023-03-11
相关资源
最近更新 更多