lua - 使用 FFI 将二进制数据读取为 Lua 数字

标签 lua ffi luajit

我有一个以二进制形式打开的文件,如下所示: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/

相关文章:

c - lua ffi 函数共享命名空间

nginx - 编译 OpenResty 上使用的 Lua 脚本

lua - 如何设置和使用lua squish?

linux - Liblua5.3-lpeg.so.2 : cannot open shared object file

lua - 2^65 模 101 错误答案

cuda - 您如何将用 C 编写的自定义 CUDA 内核链接到 Rust 项目?

c++ - 创建一个回调结构以传递到 LuaJIT FFI

windows - 在 Windows 中使用 lua os.execute 启动程序,无需 CMD 闪现

callback - luajit qsort回调示例内存泄漏

lua - "loadall.so"是什么?