LuaJit でいくつかの複雑なバイナリ メッセージを読み取る必要がある小さなアプリケーションを作成中です。
私は bit モジュールと string.rep をよく使っています。しかし、それはすべて非常に面倒です。私は LuaJit を使用するのが初めてで、FFI を使用するより簡単な方法があると思います。
CI では、次のような構造を宣言できます。
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)
次のエラーが生成されます。
だから私はキャストを試しました:
local s = ffi.string(ffi.cast("char*", ms))
エラーはありませんが、ワイヤ上では間違っているようです。