从C ++传递字节数组到lua脚本方法

时间:2011-05-31 14:31:13

标签: c++ lua arguments bytearray parameter-passing

如何将字节数组作为参数从C ++代码传递给lua脚本方法? 是否只允许int,float或string数据类型? 另外我如何从lua脚本方法中检索字节数组? 我将原始字节数组传递给脚本。它将解析并使用它。 感谢名单。

2 个答案:

答案 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类型,方法是根据用例进行定制(个别位置为数字,范围为字符串或数字表)。