有没有办法将 cdata 转换为 userdata ?如何使用C api向堆栈中推送/检索 cdata ?
编辑:原始标题提到了luajit而不是Torch。在这种情况下,除了我最终自己提交的那个答案(例如沃尔夫冈' s)之外的其他答案完全合情合理。
答案 0 :(得分:3)
Lua C API没有扩展来访问由LuaJIT的FFI库创建的cdata对象。
因此,如果您正在处理cdata,那么简单且推荐的方法是从Lua端进行编组。因此,从Lua调用C函数并将cdata
作为参数传递。
答案 1 :(得分:1)
也许您会在此处找到有用的信息:http://luajit.org/ext_ffi_semantics.html,更具体地说:http://luajit.org/ext_ffi_semantics.html#convert_fromlua
答案 2 :(得分:1)
我试图访问的cdata是来自torch7的张量对象的数据,我终于通过使用torch7 C API找到了一种方法,我会在这里发布它以防有人发现它有用:
#include <TH/TH.HW>
#include <TH/THStorage.h>
#include <TH/THTensor.h>
然后得到一个称为&#34; an_image&#34;在火炬代码中:
lua_getglobal(L,"an_image");//assuming it goes on top of the stack
THDoubleTensor*data=(THDoubleTensor*)luaT_toudata(L,-1,"torch.DoubleTensor");
最后给出了双打的缓冲区,
memcpy(dest,data->storage->data,n*sizeof(double));