c - 将大型二进制数据从 Lua 传递到 C 的最佳方法

标签 c lua

我有一个应用程序,我可以通过 LuaSockets 从网络 (500KB) 获取大量二进制数据。 (还没有实现这部分)。据我所知,这些数据将存储在某种字符串、表格或数组中。

我需要对这些数据进行复杂的处理,并且我有一个现有的、经过验证的 ANSI-C 库,我需要将数据传递给 C。我看过的方法通常是在调用堆栈中传递数据由于数据大小,对我不起作用。

现有的 ANSI-C 库需要一个指向数据和大小的指针。我可能可以用一个新的 API 包装这个 API,它逐字节地排除数据,最后一旦确定了整个大小就调用真正的 API 但这意味着从 Lua 对某些 C 函数的大量调用并且不是首选,因为我想要性能.

将这个大数据传递给 C 的最佳方法是什么? (我考虑过写入文件并传递文件名,但这不是首选,我真的想要直接内存传递)

最佳答案

假设 LuaSocket 以字符串形式提供数据,那么它真的很简单。

您的 C 应用程序将直接从 Lua 传递字符串。所以它在 Lua 堆栈上。使用 lua_tolstring 获取字符串及其大小。这将返回一个指向 Lua 拥有的内存的指针(因此您需要确保它保留在 Lua 堆栈或注册表中或在您使用它时的某个地方,以防止 Lua 对其进行垃圾收集)。然后将该字符串+大小传递给您选择的 API。

关于c - 将大型二进制数据从 Lua 传递到 C 的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12998871/

相关文章:

c++ - 当函数有多个参数时读取表会返回错误

c - 如何在 C 中打印 %s?

c - 为什么调用 select 时套接字文件描述符参数会加一?

c - 可以将实际参数定义为 `const int` 但在 header 中将其声明为 `int` 吗?

lua - 如何在Lua中创建一个唯一字符串表?

api - GMOD Wire 上的表达式 2 中的 Microsoft Translation API 存在问题

c - 从 C 访问 lightuserdata

python - 将 C 代码中的字符串发送到 Flask

c - 在 linux 主机上遇到 "floating point exception"错误

lua - 在什么编程范式下可以使用 Lua?