Есть ли способ конвертировать CDATA в данные пользователя? Как я могу использовать C api для загрузки / извлечения CDATA в / из стека?
Редактировать: В оригинальном названии упоминается luajit, но не Torch. В этом контексте другие ответы помимо того, который я наконец-то представил себе (например Вольфганг) имел смысл.
В Lua C API нет расширения для доступа к объектам cdata, созданным библиотекой FFI LuaJIT.
Итак, простой и рекомендуемый способ — сделать маршаллинг со стороны Lua, если вы имеете дело с cdata. Итак, вызовите функцию C из Lua и передайте cdata
в качестве параметра.
К данным, к которым я пытался получить доступ, относились данные тензорного объекта из torch7, я наконец нашел способ, используя torch7 C API, я опубликую его здесь на всякий случай, если кто-то сочтет это полезным:
#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 двойников,
memcpy(dest,data->storage->data,n*sizeof(double));
Может быть, вы найдете полезную информацию здесь: http://luajit.org/ext_ffi_semantics.html и более конкретно здесь: http://luajit.org/ext_ffi_semantics.html#convert_fromlua