Luajit 和 Torch7:从 Torch7 C api 访问 objects 类型的 cdata

Luajit and Torch7 : accessing objects of type cdata from the Torch7 C api

有没有办法将 cdata 转换为 userdata?如何使用Capi到push/retrievecdatato/from堆栈?

编辑:原标题提到luajit,没有提到Torch。在这种情况下,除了我最终自己提交的答案(例如 wolfgang's)之外的其他答案非常有意义。

也许您会在这里找到有用的信息:http://luajit.org/ext_ffi_semantics.html and more particularly here: http://luajit.org/ext_ffi_semantics.html#convert_fromlua

Lua C API 没有扩展来访问由 LuaJIT 的 FFI 库创建的 cdata 对象。

因此,如果您要处理 cdata,推荐的简单方法是从 Lua 端进行编组。因此,从 Lua 调用 C 函数并将 cdata 作为参数传递。

我试图访问的cdata是来自torch7的张量对象的数据,我终于找到了使用torch7 C API的方法,我将post放在这里以防万一有人认为它有用:

#include <TH/TH.HW>
#include <TH/THStorage.h>
#include <TH/THTensor.h>

然后在火炬代码中得到一个名为"an_image"的张量:

lua_getglobal(L,"an_image");//assuming it goes on top of the stack
THDoubleTensor*data=(THDoubleTensor*)luaT_toudata(L,-1,"torch.DoubleTensor");

最后给定了一个缓冲区 dest of double,

memcpy(dest,data->storage->data,n*sizeof(double));