gpt4 book ai didi

c - 是否可以使用 c 指针访问 Lua 表元素?

转载 作者:行者123 更新时间:2023-12-02 03:24:36 26 4
gpt4 key购买 nike

我在 Lua 中调用一个 C 函数,将一个数组/表作为参数传递给它:

tools:setColors({255,255,0})

在 C 函数中,我得到的大小为:

if (lua_gettop(state) == 2 && lua_istable(state, -1))
{
lua_len(state, -1);
int count = lua_tointeger(state, -1);
lua_pop(state, 1);
}

是否可以获取指向该数组的 C 指针,以便稍后将其用于 memcpy,而不是遍历表?或者,也许还有另一种方法可以直接复制数据?

更新:我实际尝试做的,所以也许有人有更好的解决方案......在我的 Lua 脚本中,我对颜色进行了一些计算。所有颜色的 RGB 值都保存在一个大表中(上面的示例表示一种颜色)。这个表通过 setColors 调用传回我的 C 代码,我通常会使用 memcpy 将它复制到 std::vector (memcpy(_colors.data(), data, length);目前,我执行以下操作:

    // one argument with array of colors (triple per color)
lua_len(state, -1);
int count = lua_tointeger(state, -1);
lua_pop(state, 1);

for (int i=0; i < count / 3; i++)
{
ColorRgb color; // struct {uint8_t red, uint8_t green, uint8_t blue}
lua_rawgeti(state, 2, 1 + i*3);
color.red = luaL_checkinteger(state, -1);
lua_pop(state, 1);

lua_rawgeti(state, 2, 2 + i*3);
color.green = luaL_checkinteger(state, -1);
lua_pop(state, 1);

lua_rawgeti(state, 2, 3 + i*3);
color.blue = luaL_checkinteger(state, -1);
lua_pop(state, 1);
_colors[i] = color;
}

对我来说似乎有很多用于简单复制操作的代码...附言我使用 Lua 5.3

最佳答案

不,不可能通过指针将 Lua 表用作 C 数组。

在 Lua 表中获取和放置值的唯一方法是使用 Lua C API。

关于c - 是否可以使用 c 指针访问 Lua 表元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31132576/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com