gpt4 book ai didi

lua - Lua 中的 "C like struct"用于 LONG BUFFER 操作?

转载 作者:行者123 更新时间:2023-12-04 23:07:25 24 4
gpt4 key购买 nike

为了 Lua 的简单和美观,我想用 Lua 而不是 C 编写“映射”代码;-)

所以让我们说在 C 中我可以有以下内容:

typedef struct my_struct{
char field_1[10];
char field_2[250];
char field_3[2000];
}my_struct;

my_struct *pmy_struct;

pmy_struct = (my_struct *) some_buffer;

所以我想在 Lua 中找到一种方法,在“结构”内的字段上设置固定长度,以便整体 BUFFER OFFSETS 在到达目标系统时保持完整......

假设在上面的结构中我想将“field_3”设置为文本“apple”......我仍然希望该结构字段的总长度为 2000 字节......

最佳答案

你可以用 Lua 做到这一点。

如果您希望(或被迫)继续使用 Lua 5.1,请考虑使用 struct图书馆。

raw_data = struct.pack("c10c250c2000", field1, field2, field3)
field1, field2, field3 = struct.unpack("c10c250c2000", raw_data)

然而,目前最好的解决方案是LuaJIT ;与标准 Lua 实现相比,使用 LuaJIT 有很多好处,但最适合您的是 FFI library .

local ffi = require"ffi"
ffi.cdef[[
typedef struct {
char field_1[10];
char field_2[250];
char field_3[2000];
} my_struct;
]]

local my_thing = ffi.new("my_struct")
my_thing.field_1 = "Ain't"
my_thing.field_2 = "this"
my_thing.field_3 = "great? :D"

local ptr_my_thing = ffi.new("my_struct*", my_thing)
ptr_my_thing.field_2 = [[
LuaJIT does a great job at figuring out
what you're trying to do.
]]
ptr_my_thing.field_3 = [[
There are some cases where the generics of
Lua cannot be used to infer information,
so have a look at the LuaJIT site for specifics.
]]

print(ffi.string(ptr_my_thing.field_2))

一种常见的误解是,Lua 和 Python 等通用语言不应该(或者,在无知中,不能)用于低级细节。LuaJIT 是“智能”语言的重要第一步,让您可以在任何级别上工作。

关于lua - Lua 中的 "C like struct"用于 LONG BUFFER 操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11607372/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com