无法在 Lua 5.1 上读取二进制文件的每个字节
Can't read every byte of binary files on 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 版出于某种原因只是跳过了文件的第一个 "line"。
任何帮助将不胜感激。
这是 Lua 5.1 和 Lua 5.2 中的错误,已在 Lua 5.3 中更正。
无论如何,不要对二进制文件使用 f:lines()
。相反,使用 f:read("*a")
读取整个文件或按块读取。
,朋友们您好!我一直在尝试将与 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 版出于某种原因只是跳过了文件的第一个 "line"。
任何帮助将不胜感激。
这是 Lua 5.1 和 Lua 5.2 中的错误,已在 Lua 5.3 中更正。
无论如何,不要对二进制文件使用 f:lines()
。相反,使用 f:read("*a")
读取整个文件或按块读取。