从C++向Lua脚本方法传递字节数组。

我怎样才能从 C++ 代码将一个 byte 数组作为参数传递给 Lua 脚本方法呢? 只允许使用 int、float 或 string 数据类型吗? 同时,我怎样才能从 Lua 脚本方法中检索到 byte 数组呢? 我将传递一个原始的 byte 数组到脚本中。它会解析并使用它。 谢谢。

原文链接 https://stackoverflow.com/questions/6189149

点赞
stackoverflow用户34799
stackoverflow用户34799

整型和浮点型的值将被转换为 Lua 的数字类型(默认为 double)。

如果脚本本身只需要保留一个指针以在函数之间传递,通常会将 C 数据块作为轻量级用户数据进行推送:

lua_pushlightuserdata(L, bufptr);

当向 Lua 传递字节数组时,通常使用字符串(可以使用 lua_pushlstring 创建任意数据的字符串):

lua_pushlstring (L, bufptr, buflen);

这将在 Lua 中创建一个不可变字符串,只能通过创建新的字符串来修改。

如果需要在 Lua 中使用可变的字节缓冲区(不建议使用——低级字节操作是 C 的设计目标,而 Lua 不是),最好是为该缓冲区创建一个 userdata 类型,并添加适合用例的获取和设置方法(将单个位置作为数字,将范围作为字符串或数字表格)。

2011-05-31 14:41:34
stackoverflow用户404568
stackoverflow用户404568

这取决于你要做什么。Lua 字符串是不可变的字节数组,所以如果它们很小,最好的方法可能是使用 lua_pushlstring 将字节数组转换为字符串,然后像那样传递---是的,嵌入的 \0 是支持且正常工作的。但是由于它们是不可变的,每次想要修改它们时 Lua 都会复制字符串,因此它可能不适合你的要求。

其他选项包括:

  • 在 C++ 字节数组和 Lua 数组(也就是数字表)之间来回复制数据。这将非常昂贵的内存,但可能是最简单的方式。

  • 用轻量的 userdata 包装 C++ 字节数组,并提供 Lua 绑定以允许你直接访问它。这是最有效的,但需要编写相当多的代码。

2011-05-31 14:46:18