我有一个以二进制形式打开的文件,如下所示:local dem = io.open("testdem.dem", "rb")
我可以很好地从中读出字符串: print(dem:read(8))
-> HL2DEMO
,但是,之后有一个 4 字节小端整数和4 字节 float (文件格式的文档没有指定字节顺序,但由于它没有指定像整数一样的大小,所以我必须假设为大)。
这不能用read
读出。
我是 LuaJIT FFI 的新手,不知道如何阅读它。坦率地说,我发现有关 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 *')
]]--
摘要:
目标:从二进制数据中读取整数和 float 。
预期输出:然后我可以将 lua 整数或 float 转换为字符串。
最佳答案
string.unpack Lua 5.3 就是这样做的,但 LuaJIT 也有一些替代方案。例如,参见this answer (以及同一问题的其他答案)。
关于lua - 使用 FFI 将二进制数据读取为 Lua 数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61535397/