将LuaJIT FFI结构转换为表

将LuaJIT FFI结构转换为表,lua,luajit,Lua,Luajit,在LuaJIT FFI库中,可以使用结构。有没有一个简单的方法来做相反的事情?显然,对于任何特定的结构,编写函数将其转换为表都很容易,但需要重复字段。我并不特别关心性能,这只是为了调试。您可以使用Lua库,它使用ffi.typeinfo读取内部ctype信息以获取结构的字段名列表 local ffi = require "ffi" local reflect = require "reflect" ffi.cdef[[typedef struct test{int x, y;}test;]]

在LuaJIT FFI库中,可以使用结构。有没有一个简单的方法来做相反的事情?显然,对于任何特定的结构,编写函数将其转换为表都很容易,但需要重复字段。我并不特别关心性能,这只是为了调试。

您可以使用Lua库,它使用ffi.typeinfo读取内部ctype信息以获取结构的字段名列表

local ffi = require "ffi"
local reflect = require "reflect"

ffi.cdef[[typedef struct test{int x, y;}test;]]
local cd = ffi.new('test', 1, 2)

function totab(struct) 
  local t = {}
  for refct in reflect.typeof(struct):members() do
    t[refct.name] = struct[refct.name]
  end
  return t
end

local ret = totab(cd)
assert(ret.x == 1 and ret.y == 2)