是否有内置程序将lightuserdata转换为int?

Lightuserdatauserdata不同,那么我该如何处理它呢?我是指在Lua中如何操作lightuserdata。似乎我无法将其转换为任何其他数据类型。

我的一个情况:

我的C库返回一个名为“c_pointer”的C指针,也称为lightuserdata,然后我想:

my_pointer = c_pointer + 4

然后将“my_pointer”传回C库。由于我无法对“c_pointer”进行任何操作,因此表达式“c_pointer + 4”无效。

我想知道是否有一些实际的解决方案?

点赞
用户12048
用户12048

Plain Lua 没有指针算术,因此,像 Doug Currie 所述,需要在 C 方面进行指针算术。

另一方面,LuaJIT 可以通过 FFI 库进行指针算术,因此可以考虑使用它。

2013-05-07 00:54:22
用户33252
用户33252

轻量级用户数据 (Lightuserdata)

轻量级用户数据是由C库创建的,它们只是C指针。

例如,您可以使用它们来引用您使用 malloc 分配的数据,或在模块中静态分配的数据。您的C库可以使用 lua_pushlightuserdata 将这些指针传输到Lua一侧,稍后Lua可以将其压回到您的库(或其他C代码)的数据栈上。Lua代码可以像任何其他值一样使用轻量级用户数据,例如将其存储在表中,甚至作为表键。

补充说明:

回答您修改后的问题,如果您想将偏移量添加到指针上,请在C端完成。将轻量级用户数据和整数偏移量传递给C,然后让C使用 ptr[n] 进行偏移。

void * ptr = lua_touserdata(L, idx1);
lua_Integer n = lua_tointeger(L. idx2);
// do something with
((char *)ptr)[n];
2013-05-07 01:07:53