【问题标题】:LUA - Read a binary file bit by bitLUA - 逐位读取二进制文件
【发布时间】:2012-09-05 17:00:44
【问题描述】:

您可以使用f:read(size)逐字节读取二进制文件,其中大小表示字节数,但如何逐位读取?(1 /8 字节或八位字节(如果需要)

大部分数据都可以 Int8(1),Uint16(2),Uint32(4),Int*(4) 但是对于 BOOL(0.125 ?)。

感谢您的帮助!

编辑:我的问题显然不是逐位读取文件,而是设法提取所有数据,包括一些布尔值(不创建 1 位的“移位”)。

【问题讨论】:

  • 只需读取字节并从中解析位。如果您提供有关数据结构的更多详细信息,人们可以给出更详细的答案。

标签: lua boolean binaryfiles


【解决方案1】:

你不能。字节是可以从文件中读取的最小单位。您可以编写包装按字节访问的代码以使其看起来按位。

从文件中读取布尔值的适当方式取决于文件的写入方式。除非你在一点一点地写入布尔值时遇到同样的麻烦,否则没有必要那样读取它们。

Lua 文件 API 只处理数字和字符串。要写入布尔值,您需要将其转换为其中一种类型。要阅读它,您将阅读其中一种类型并执行您用于写入的转换的逆操作。例如,您可以将true 转换为1 并将false 转换为0,然后写入和读取数字。或者您可能会尝试将多个布尔值打包到一个数字中。在任何情况下,您都不需要逐位读取或写入文件来读取和写入布尔数据。

【讨论】:

  • 如果你想要技术,你也不能从文件中读取字节。您逐页阅读它们,并在您只需要它们的一个字节时缓冲页面。
  • @NicolBolas:这不是真的,因为内核提供了 1 字节分辨率的 read 和 write 函数,并保持文件的大小,同样以字节为单位。
  • "您可以编写代码来包装按字节访问以使其看起来按位。"这正是我正在寻找的。你能帮我吗?
  • 如果我理解的话,我需要读取一定数量的字节,然后将其拆分为不同类型的值,但我无法找到一个只读取一点的函数......
  • 我想我可以使用模等做一些事情。但我希望有更简单的方法......
猜你喜欢
  • 2012-07-25
  • 1970-01-01
  • 1970-01-01
  • 2013-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-11
  • 1970-01-01
相关资源
最近更新 更多