File Can';t读取LUA5.1上二进制文件的每个字节

File Can';t读取LUA5.1上二进制文件的每个字节,file,lua,io,binary,version,File,Lua,Io,Binary,Version,,你好,朋友们!我一直在尝试将与Lua5.1的兼容性添加到我正在开发的库中,而这最初是写在Lua5.3中的。到目前为止,一切都相当顺利 我有一种行为,我完全不知道原因。事情是这样的:显然,我无法在Lua5.1上正确读取二进制文件。为清晰起见,运行此测试片段会根据运行的版本产生不同的输出 local f = io.open("test.bin", "wb") local t = {} for i=1, 256 do t[i] = i-1 end local unpack = unpack or t

,你好,朋友们!我一直在尝试将与Lua5.1的兼容性添加到我正在开发的库中,而这最初是写在Lua5.3中的。到目前为止,一切都相当顺利

我有一种行为,我完全不知道原因。事情是这样的:显然,我无法在Lua5.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版只是出于某种原因跳过了文件的第一行。

任何帮助都将不胜感激。

这是Lua5.1和Lua5.2中的一个错误,已在Lua5.3中更正

无论如何,不要对二进制文件使用
f:lines()
。相反,可以使用
f:read(“*a”)
读取整个文件,或者分块读取