如何将字节数组作为参数从C ++代码传递给lua脚本方法? 是否只允许int,float或string数据类型? 另外我如何从lua脚本方法中检索字节数组? 我将原始字节数组传递给脚本。它将解析并使用它。 感谢名单。
答案 0 :(得分:5)
取决于你想做什么。 Lua字符串是不可变的字节数组,所以如果它们很小,你可能最好只需将字节数组转换为lua_pushlstring
的字符串并将其传递给那样---是的,支持嵌入式\ 0和工作良好。但是因为它们是不可变的,所以每次想要修改它时,Lua都会复制字符串,因此它可能不适合您的要求。
其他选项包括:
在C ++字节数组和Lua数组(即数字表)之间来回复制数据。这在内存中相当昂贵,但可能是最简单的方法。
在lightuserdata中包装C ++字节数组并提供Lua绑定以允许您直接访问它。这是最有效的,但代码相当多。
答案 1 :(得分:2)
Int和float值将转换为Lua的数字类型(默认情况下为double
)。
如果脚本本身只需要保持指针在函数之间传递,那么C数据的blob通常会被推送为light userdata:
lua_pushlightuserdata(L, bufptr);
当将字节数组传递给Lua时,通常使用字符串(可以使用lua_pushlstring
创建任意数据的字符串):
lua_pushlstring (L, bufptr, buflen);
这将在Lua中创建一个不可变的字符串,只能通过创建新字符串来修改。
如果你需要在Lua中使用可变字节缓冲区(不推荐 - 低级别字节操作是C的设计,而Lua不是),最好的办法是为缓冲区创建一个userdata类型,方法是根据用例进行定制(个别位置为数字,范围为字符串或数字表)。