【问题标题】:Convert Lua table to C array?将 Lua 表转换为 C 数组?
【发布时间】:2012-07-24 15:32:03
【问题描述】:

我正在寻找的是这样的:

lua 脚本

MY_ARRAY = {
00, 10, 54, 32,
12, 31, 55, 43,
34, 65, 76, 34,
53, 78, 34, 93
}

c 代码

lua_Number array[] = lua_getarray("MY_ARRAY");

这可能吗?有什么类似的东西可以让 C 中的 lua 表更容易处理吗?

【问题讨论】:

    标签: c arrays lua


    【解决方案1】:

    你可以自己写这样的函数!行数不宜过多。但最好使用指针而不是数组,因为它们可以指向任意数量的元素。界面可能是这样的:

    lua_Number *values;
    size_t nvalues;
    values = luaGetNumbers("MY_ARRAY", &nvalues);
    /* the number of values is now nvalues */
    for (int i=0; i<nvalues; i++) {
         /* do something with values[i] */
    }
    free(values);
    

    并且实现应该使用以下函数(来自http://www.lua.org/manual/5.2/manual.html):

    void lua_getglobal (lua_State *L, const char *name);
    

    将全局名称的值压入堆栈。


    void lua_gettable (lua_State *L, int index);
    

    将值 t[k] 压入堆栈,其中 t 是第 给定有效索引,k 是堆栈顶部的值。

    此函数从堆栈中弹出键并放入结果值 在它的位置)。和 Lua 一样,这个函数可能会触发一个元方法 “索引”事件(参见 §2.4)。


    lua_Number lua_tonumberx (lua_State *L, int index, int *isnum);
    

    将给定可接受索引处的 Lua 值转换为 C 类型 lua_Number(参见 lua_Number)。 Lua 值必须是数字或 可转换为数字的字符串(参见 §3.4.2);否则,lua_tonumberx 返回 0。

    如果 isnum 不为 NULL,则为其所指对象分配一个布尔值 表示操作是否成功。


    void lua_len (lua_State *L, int index);
    

    返回给定可接受索引处值的“长度”;它是 相当于 Lua 中的 '#' 操作符(参见 §3.4.6)。结果是 压入堆栈。

    【讨论】:

      猜你喜欢
      • 2020-04-02
      • 1970-01-01
      • 2016-07-05
      • 2016-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多