我有一个以二进制形式打开的文件,如下所示:local dem = io.open("testdem.dem", "rb")
我可以从中读取字符串:print(dem:read(8))
-> HL2DEMO
,但是,此后有一个4字节的小端整数和一个4字节的浮点数(用于文件格式的文档未指定字节序,但是由于它没有像我必须假设为大的整数那样指定一点)。无法用read
读出。我是LuaJIT FFI的新手,不确定如何阅读此内容。坦率地说,尽管我只是一个lua程序员,并且对C没有太多的经验,但我发现有关FFI特定方面的文档令人难以理解。我尝试过的一件事是创建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整数或浮点数,然后我可以将其转换为字符串。
string.unpack对于Lua 5.3做到了这一点,但是LuaJIT也有一些替代方案。例如,请参阅this answer(以及同一问题的其他答案)。