从C++向lua脚本方法传递字节数组
Passing byte array to lua script method from C++
如何将字节数组作为参数从C++代码传递给lua脚本方法?只允许使用int、float或字符串数据类型吗?此外,我如何从lua脚本方法检索字节数组?我将把一个原始字节数组传递给脚本。它将解析并使用它。Thanx。
这取决于你想要做什么。Lua字符串是不可变的字节数组,所以如果它们很小,你最好把字节数组变成一个带有lua_pushlstring
的字符串,然后像这样传递它——是的,嵌入式\0是受支持的,并且运行良好。但由于它们是不可变的,每次你想修改字符串时,Lua都会复制它,所以它可能不适合你的需求。
其他选项包括:
-
在C++字节数组和Lua数组(即数字表)之间来回复制数据。这将是相当昂贵的内存,但可能是最简单的方法。
-
将C++字节数组封装在lightuserdata中,并提供Lua绑定以允许您直接访问它。这是最高效的,但代码量相当大。
Int和float值将转换为Lua的数字类型(默认情况下为double
)。
如果脚本本身只需要保留一个指针来在函数之间传递,那么C数据块通常会作为轻用户数据推送:
lua_pushlightuserdata(L, bufptr);
当将字节数组传递给Lua时,通常使用字符串(可以使用lua_pushlstring
创建任意数据的字符串):
lua_pushlstring (L, bufptr, buflen);
这将在Lua中创建一个不可变的字符串,该字符串只能通过创建新的字符串来修改。
如果您需要在Lua中使用可变字节缓冲区(不推荐使用-低级字节操作是C的设计目的,而Lua不是),最好的选择是为缓冲区创建一个用户数据类型,并根据用例定制方法(单个位置为数字,范围为字符串或数字表)。
相关文章:
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 如何将字节数组元素替换为修改的十六进制 ASCII 符号?
- 基于字节数组生成静态范围整数值
- 将字节数组转换为带有字节序问题的指针
- 找到一种有效的方法,在 2 个巨大的缓冲区上执行 MAX,每字节字节
- 使用 stbi_write_png,如何将 0 和 1 的矩形字节数组转换为单色 png 文件?
- 字节数组初始化会导致 DirectX 崩溃
- 使用 swig 追加到字节数组
- C++ 替换字节数组中项的顺序
- QDataStream 读取和写入的字节数比 QFile::length() 报告要多
- 如何从保存在 Java 中C++的字节数组中读取数字?
- 如何通过libpq c api插入字节的数组
- i2c中的字节指针数组
- 以 C++ 为单位递增 16 字节字符数组
- new[] 一个包含构造函数的字节对象数组没有错,对吧?
- 创建未知长度的字节/字符数组
- 我如何将bitset转换为字节/uint8数组
- C++ <--> C# 修改字节编组数组
- 将m个字节的数组拆分为n个字节的块
- c++到c#:有3个元素的字节指针数组等于什么?