将Lua表转换为C数组?

时间:2012-07-26 05:04:33

标签: c arrays lua

我正在寻找的是:

lua脚本

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

c code

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

这可能吗?是否有类似的东西可以更轻松地处理C中的lua表。

1 个答案:

答案 0 :(得分:4)

你可以自己写这样的功能!它不应该是太多的线。但是使用指针比使用数组更好,因为它们可以指向任意数量的元素。界面可能是这样的:

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一样,这个函数可能触发一个metame方法   “索引”事件(见§2.4)。


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

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

     

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


void lua_len (lua_State *L, int index);
  

返回给定可接受索引处的值的“长度”;它是   相当于Lua中的'#'运算符(参见§3.4.6)。结果是   推到了堆栈上。