从 C++ 将字节数组传递给 lua 脚本方法
Posted
技术标签:
【中文标题】从 C++ 将字节数组传递给 lua 脚本方法【英文标题】:Passing byte array to lua script method from C++ 【发布时间】:2011-09-05 13:24:28 【问题描述】:如何将字节数组作为参数从 C++ 代码传递给 lua 脚本方法? 是否只允许使用 int、float 或 string 数据类型? 另外,我如何从 lua 脚本方法中检索字节数组? 我会将原始字节数组传递给脚本。它将解析并使用它。 谢谢。
【问题讨论】:
【参考方案1】:取决于你想做什么。 Lua 字符串是不可变的字节数组,因此如果它们很小,您最好将字节数组转换为带有 lua_pushlstring
的字符串并像这样传递它 --- 是的,支持嵌入的 \0 并且工作正常.但是因为它们是不可变的,Lua 每次你想修改它时都会复制字符串,所以它可能不适合你的要求。
其他选项有:
在 C++ 字节数组和 Lua 数组(即数字表)之间来回复制数据。这在内存上会相当昂贵,但可能是最简单的方法。
将您的 C++ 字节数组包装在一个 lightuserdata 中,并提供 Lua 绑定让您直接访问它。这是最有效的,但代码量很大。
【讨论】:
【参考方案2】:Int 和 float 值将被转换为 Lua 的数字类型(默认为double
)。
如果脚本本身只需要保留一个指针在函数之间传递,C 数据块通常作为轻用户数据推送:
lua_pushlightuserdata(L, bufptr);
向 Lua 传递字节数组时,通常使用字符串(可以使用lua_pushlstring
创建任意数据的字符串):
lua_pushlstring (L, bufptr, buflen);
这将在 Lua 中创建一个不可变字符串,只能通过创建新字符串来修改。
如果您需要在 Lua 中使用可变字节缓冲区(不推荐 - 低级字节操作是 C 设计的,而 Lua 不是),最好的办法是为缓冲区创建一个用户数据类型,并使用以下方法获取和设置为用例量身定制(个别位置为数字,范围为字符串或数字表)。
【讨论】:
以上是关于从 C++ 将字节数组传递给 lua 脚本方法的主要内容,如果未能解决你的问题,请参考以下文章