将二进制数据读取为带有FFI的Lua数



我打开了一个二进制文件,如下所示:local dem = io.open("testdem.dem", "rb")
我可以很好地从中读取字符串:print(dem:read(8))->HL2DEMO,但之后有一个4字节的小endian整数和一个4个字节的浮点值(文件格式的文档不指定endianes,但由于它不像整数那样指定小,所以我必须假设它是大的(。这不能用read读出。我是LuaJIT外国金融机构的新手,不知道如何阅读。坦率地说,我发现关于FFI这一特定方面的文档并不令人满意,尽管我只是一名lua程序员,对C没有太多经验。我尝试过的一件事是创建一个cdata,但我认为我不理解:

local dem = io.open("testdem.dem", "rb")
print(dem:read(8))
local cd = ffi.new("int", 4)
ffi.copy(cd, dem:read(4), 4)
print(tostring(cd))
--[[Output
HL2DEMO
luajit: bad argument #1 to 'copy' (cannot convert 'int' to 'void *')
]]--

摘要:
目标:从二进制数据中读取整数和浮点值
期望的输出:一个lua整数或float,然后我可以转换为字符串。

字符串unpack为Lua 5.3执行此操作,但也有一些LuaJIT的替代方案。例如,请参阅此答案(以及同一问题的其他答案(。

最新更新