Luajit和Torch7:通过Torch7 C API访问cdata类型的对象。

有没有一种方法将 cdata 转换为 userdata?我如何使用 C API 将 cdata 推送 / 检索到 / 自 / 栈 /?

编辑:原标题提到了 luajit,但没有 Torch。在那种情况下,除了我最后提交的回答(e.g wolfgang's)之外的其他回答都是有道理的。

点赞
用户4943844
用户4943844

或许这里会有有用的信息:http://luajit.org/ext_ffi_semantics.html,更具体一些的在这里:http://luajit.org/ext_ffi_semantics.html#convert_fromlua

2015-05-27 08:57:18
用户317562
用户317562

不支持使用 LuaJIT FFI 库创建的 cdata 对象访问 Lua C API 的扩展。

因此,如果你处理 cdata,从 Lua 端进行数据封送是一种简单和推荐的方式。因此,从 Lua 调用 C 函数,并将 cdata 作为参数传递。

2015-05-27 10:16:54
用户1866656
用户1866656

我尝试访问的cdata是来自于torch7的张量对象的数据,最终我通过使用torch7 C API找到了一种方法,我在这里发布它以备有人发现它有用:

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

然后在torch代码中获取名为“an_image”的张量:

lua_getglobal(L,"an_image");//假设它位于栈顶
THDoubleTensor*data=(THDoubleTensor*)luaT_toudata(L,-1,"torch.DoubleTensor");

最后,给定一个double类型的缓冲区dest,

memcpy(dest,data->storage->data,n*sizeof(double));
2015-05-27 10:47:54