无法读取 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")读取整个文件或按块读取。

最新更新