【问题标题】:Can't read every byte of binary files on Lua 5.1无法读取 Lua 5.1 上二进制文件的每个字节
【发布时间】:2017-12-29 07:24:18
【问题描述】:

,朋友们好!我一直在尝试将与 Lua 5.1 的兼容性添加到我正在开发的库中,该库最初是在 Lua 5.3 中编写的。到现在为止,一切都很顺利。

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

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 版出于某种原因只是跳过了文件的第一“行”。
任何帮助将不胜感激。

【问题讨论】:

    标签: file lua io binary version


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2010-11-05
      • 2011-01-24
      • 2013-12-06
      • 1970-01-01
      • 2012-07-11
      • 2011-08-30
      • 1970-01-01
      • 2013-01-01
      • 1970-01-01
      相关资源
      最近更新 更多