【发布时间】:2012-12-24 18:32:38
【问题描述】:
假设我有一个数据包(网络数据包),它存储在 C 中的一个数组中。我在 Lua 中有一个可以处理这个数据包的模块。现在我需要将此数据包传递给 Lua 进行处理。我想避免复制数据。为此,我可以使用 userdata 或 lightuserdata。但是在这种情况下,基地址将被推到堆栈顶部,我需要在 Lua 中编写回调或在 C 中为其编写元表。
我在如何开始用 C 编写一个基本的小回调时遇到了困难。我所需要的只是假设我有一个如下结构:
struct abc_{
int a;
int b;
char* c;
} abc_t;
int arr1[] = {'100', '2', '4' , '5', '6'};
现在我有一个包含一些数据的数组。在 C 语言中,我可以使用这种结构对该数组进行类型转换以获取特定值。
abc_t *test;
test = (abc_t *)arr1;
我如何在 Lua 中做同样的事情,我在堆栈顶部传递了 arr1 的地址并且结构是在 C 中定义的?如何在没有副本的情况下在 Lua 中获取变量 a、b 的值?
问题 2
假设我使用 C 并使用 Lua 堆栈来处理数组。
如果我想访问a[2],其中a 是我的表,2 是索引,那么2 需要位于堆栈顶部,我需要在堆栈中传递a 的位置作为lua_gettable() 的第二个参数。我怎样才能对 结构 做同样的事情?我想访问结构的特定元素。该怎么做?
【问题讨论】:
-
我不认为你可以通过这个演员获得价值。你知道
abc_t的内存布局吗?指针c将在转换后无效。int'100'有什么价值?