无法读取Lua 5.1上的二进制文件的每个字节

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法读取Lua 5.1上的二进制文件的每个字节相关的知识,希望对你有一定的参考价值。

,你好朋友!我一直在尝试将Lua 5.1的兼容性添加到我正在处理的库中,并且最初写入Lua 5.3。到目前为止,一切都很顺利。

我偶然发现了一个我完全不知道原因的行为。事情就是这样:显然,我无法在Lua 5.1上正确读取二进制文件。为清楚起见,运行此测试代码段会根据其运行的版本生成不同的输出。

local f = io.open("test.bin", "wb")
local t = {}
for i=1, 256 do t[i] = i-1 end
local unpack = unpack or table.unpack
local str = string.char(unpack(t))
f:write(str)
f:close()

f = io.open("test.bin", "rb")
local buffer = {}
for line in f:lines() do
   print(#line)
   for i=1, #line do
      buffer[#buffer+1] = string.byte(line:sub(i,i))
   end
end
print('Total:', #buffer)
f:close()

使用Lua 5.1:

245
Total:  245

使用Lua 5.3:

10
245
Total:  255

因此,我看到它的方式是版本5.1只是出于某种原因跳转到文件的第一个“行”。 任何帮助将深表感谢。

答案

这是Lua 5.1和Lua 5.2中的一个错误,在Lua 5.3中已得到纠正。

无论如何,不​​要将f:lines()与二进制文件一起使用。相反,用f:read("*a")or读取整个文件。

以上是关于无法读取Lua 5.1上的二进制文件的每个字节的主要内容,如果未能解决你的问题,请参考以下文章

lua能够用来写二进制数据吗?

读取二进制文件并遍历每个字节

深入理解 Lua 虚拟机

从波形文件python读取字节

怎样使用lua读取文件夹内所有文件?

深入理解Lua虚拟机