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

时间:2015-06-30 07:51:19

标签: c lua

我在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

1 个答案:

答案 0 :(得分:1)

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

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