将Lua表格转换为C数组?

我要找的是这样的:

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");

这可能吗?是否有类似的东西可以更轻松地处理Lua表格?

点赞
用户1283954
用户1283954

你可以自己编写这样的函数!它不应该太长。但最好使用指针而不是数组,因为它们可以指向任意数量的元素。接口可能如下所示:

lua_Number *values;
size_t nvalues;
values = luaGetNumbers("MY_ARRAY", &nvalues);
/* 现在值的数量为 nvalues */
for (int i=0; i<nvalues; i++) {
     /* 对 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 一样,此函数可能触发“index”事件的元方法(请参见 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 节)。结果被推入堆栈上。

2012-07-26 05:53:33