使用FFI将二进制数据读取为Lua号

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用FFI将二进制数据读取为Lua号相关的知识,希望对你有一定的参考价值。

我有一个以二进制形式打开的文件,如下所示: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(以及同一问题的其他答案)。

以上是关于使用FFI将二进制数据读取为Lua号的主要内容,如果未能解决你的问题,请参考以下文章

luajit 开启FFI + jit之后彪悍的性能

lua能够用来写二进制数据吗?

ffi动态链接库的使用

lua中是 ffi 解析 是如何处理数据包的/pkt是如何传进去的

lua中是 ffi 解析 是如何处理数据包的/pkt是如何传进去的 fsfsfs

无法读取Lua 5.1上的二进制文件的每个字节