我正在编写一个小应用程序,需要在LuaJit中读取一些复杂的二进制消息。我一直在大量使用bit模块和string.rep,但这些都很繁琐。我是LuaJit的新手,认为使用FFI可能会有更简单的方法。在C语言中,我可以声明这样一个结构:
在阅读LuaJit的FFI时,似乎您可以声明。
我可以创建一个mystruct结构体并像这样访问它的字段:
但是,如何将它转换回Lua字符串呢? 我尝试了这个方法,但似乎没达到我的预期效果。
struct mystruct
{
uint32_t field1;
char field2[6];
uin64_t field3;
short field4;
} __attribute__(packed);
在阅读LuaJit的FFI时,似乎您可以声明。
ffi.cdef[[
#pragma pack(1)
struct mystruct
{
uint32_t field1;
char field2[6];
uin64_t field3;
short field4;
};
]]
我可以创建一个mystruct结构体并像这样访问它的字段:
local ms = ffi.new("mystruct")
ms.field1 = 32;
// ... etc
但是,如何将它转换回Lua字符串呢? 我尝试了这个方法,但似乎没达到我的预期效果。
local s = tostring(ms)
还有这个:
local s = ffi.string(ms)
产生以下错误:“bad argument #1 to 'string' (cannot convert 'struct mystruct' to 'const char *')”。
所以我尝试了一个类型转换:
local s = ffi.string(ffi.cast("char*", ms))
没有错误,但在传输过程中看起来不正确。