Lua中的“C like struct”用于长缓冲区操作?

2024-02-25

为了 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中找到一种方法,在“结构”内的字段上有固定的长度,以便整体缓冲区偏移量在到达目标系统时保持完好......

所以可以说,在上面的结构中,我想将“field_3”设置为文本“apple”……我仍然希望该结构字段的总长度为 2000 字节……


你可以用 Lua 来做到这一点。

如果您希望(或被迫)继续使用 Lua 5.1,请考虑使用struct http://www.inf.puc-rio.br/~roberto/struct/图书馆。

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

不过,目前最好的解决方案是LuaJIT http://luajit.org/luajit.html;与标准 Lua 实现相比,使用 LuaJIT 有很多好处,但最适合您的是外国金融机构图书馆 http://luajit.org/ext_ffi.html.

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 是“智能”语言的重要第一步,它允许您在任何级别上工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Lua中的“C like struct”用于长缓冲区操作? 的相关文章

  • Lua中如何去除字符串中的空格?

    我想从 Lua 中的字符串中删除所有空格 这是我尝试过的 string gsub str string gsub str string gsub str s 这似乎不起作用 如何删除所有空格 它有效 您只需分配实际结果 返回值 使用以下变体
  • 代码说“尝试比较数字<=实例”

    It says Players ninjafox56 PlayerGui Shop ShopGui LightSide ChooseSideL 5 尝试比较数字 Rank game Players LocalPlayer leadersta
  • 为什么这个 Lua 优化 hack 会提高性能?

    我正在寻找一个描述提高 Lua 性能的各种技术的文档 http www lua org gems sample pdf脚本代码 我很震惊竟然需要这样的技巧 虽然我引用的是 Lua 但我在 Javascript 中也见过类似的 hack 为什
  • 如何将 Lua 嵌入到 Python 3.x 中?

    是否可以将 Lua 嵌入到 Python 3 x 中 如果是这样 我如何在我的 Python 程序中运行和执行 Lua 脚本 语言之间的交互有多好 例如 Lua 是否可以访问 Python 的所有变量和类以及 Python 是否可以访问 L
  • 如何使用循环将字符串连接成一个?

    有人可以帮我解决字符串连接问题吗 我从寄存器读取数据 它的函数 utf regAddr length 我得到带有十进制数字的表格 然后将其转换为十六进制并循环字符串 我需要将这些字符串连接成一个 Lua中没有像 这样的操作符 functio
  • 如何使用Lua脚本语言打开Web套接字?

    作为初学者 我想在基于 Linux 的服务器上使用 Lua 打开一个 Web 套接字 该服务器应允许 Android 客户端连接到它 你能给我一些用Lua打开网络套接字的示例代码吗 您两周前已经问过同样的问题并得到了回答 LUA 脚本 We
  • 如何访问废弃的函数参数?

    在 Lua 中 调用带有多余参数的函数将简单地丢弃这些参数 有没有可能与debug库来访问这些被丢弃的参数 我不是在寻找可变参数函数 function test local info debug getinfo 1 u print info
  • 了解静态链接嵌入式lua环境中lua扩展dll的构建/加载

    我有一个相对复杂的 lua 环境 我试图了解以下内容如何工作 起始设置包括以下两个模块 主要应用 无lua环境 DLL 静态链接到lua lib 包括解释器 该 dll 被加载到主应用程序中 并运行 lua 控制台解释器和可从控制台访问的
  • C 的哪些部分最可移植?

    我最近读到了 Lua 联合创始人 Luiz H de Figueredo 和 Roberto Ierusalimschy 的采访 他们讨论了 Lua 的设计和实现 至少可以说这是非常有趣的 然而 讨论的一部分让我想起了一些事情 Robert
  • Redis 排序集和解决关系

    我正在使用 Redis 排序集来存储我正在处理的项目的排名 我们没有预料到 我们想要如何处理关系 Redis 按字典顺序对具有相同分数的条目进行排序 但我们想要做的是对具有相同分数的所有条目给予相同的排名 例如在以下情况 redis 127
  • lua http套接字超时

    LuaSocket HTTP 模块文档说可以在 HTTP 连接上设置超时 可以设置以下常量来控制 HTTP 模块的默认行为 PORT 用于连接的默认端口 PROXY 用于连接的默认代理 TIMEOUT 设置所有I O操作的超时时间 USER
  • Lua-迭代嵌套表

    我已经学习 Lua 几个星期了 这一次又一次成为我的症结所在 我尝试阅读有关该主题的帖子和书籍 我使用 Lua 查询软件监控系统 Nimsoft 我的数据以表格形式返回给我 我不会发布整个输出 但这里有一个我认为可以描述结构的片段 表参考是
  • 什么时候适合使用Lua这样的嵌入式脚本语言

    我玩 魔兽世界 大约有两年了 我对用来编写插件的 Lua 很好奇 由于到目前为止我读到的有关 Lua 的内容都是 快 轻 和 这太棒了 所以我想知道如何以及何时使用它 您需要在系统中嵌入像 Lua 这样的脚本语言的典型情况是什么 当您需要最
  • 如何在Conky中实现一个基本的Lua功能?

    我正在尝试向我的 Conky 添加一个函数 该函数打印字符串的长度以用于调试目的 代码位于名为的文件内test lua 非常简单 function test word return string len word end 我这样加载它 在我
  • 在lua中组合两个函数

    我刚开始学习lua 所以我的要求可能是不可能的 现在 我有一个接受函数的方法 function adjust focused window fn local win window focusedwindow local winframe w
  • 使用 FastCGI 运行 Lua 脚本

    我目前正在尝试找出使用 FastCGI 与 lighttpd 或 Nginx 一起运行 Lua 脚本的方法 我唯一能挖到的是WSAPI http keplerproject github com wsapi 开普勒计划的一部分 但我想知道是
  • 比较 Lua 中的日期

    我有一个带有日期表的变量 如下所示 table day number 15 year number 2015 month number 2 如何获取当前日期与上述日期之间的天数 非常感谢 您可以使用os time 将表转换为秒并获取当前时间
  • 如何通过 C API 在自己的环境中执行不受信任的 Lua 文件

    我想通过调用在其自己的环境中执行不受信任的 lua 文件lua setfenv http pgl yoyo org luai i lua setfenv这样它就不会影响我的任何代码 该函数的文档仅解释了如何调用函数 而不解释如何执行文件 目
  • LuaJ 导入 Lua 方法

    我正在使用 LuaJ 并且我有一个 lua文件充满了一堆函数 如何通过 LuaJ 导入这些函数以在 Java 中使用 一种选择是将文件编译为 Java 代码并导入它 另一种方法是使用可嵌入解释器直接从 Java 代码中调用 Lua 文件 E
  • 关闭 Löve2D 中的抗锯齿功能

    我在用着L ve2D http love2d org用于编写一个小游戏 L ve2D 是 Lua 的开源游戏引擎 我遇到的问题是 当您在非整数位置绘制精灵时 某些抗锯齿过滤器会自动应用于精灵 love graphics draw sprit

随机推荐

  • tsc 未被识别为内部或外部命令

    我从 VSCode 0 10 6 更新到 0 10 8 并第一次尝试使用 Typescript 不幸的是 当我告诉 VSCode 构建时 我收到错误 tsc 不被识别为内部或外部命令 以下是相关详情 I created a fresh He
  • 如何采用按单独列排序的 DISTINCT ON 子查询并使其快速?

    又名 查询和数据与问题非常相似 选择按某列排序且在另一列上不同的行 https stackoverflow com questions 9796078 selecting rows ordered by some column and di
  • 如何在 Angular 8 或 9 中发出同步 HTTP 请求(发出请求并等待)

    有三个按钮 单击第一个Request HTTP Data As Promise按钮获取其 HTTP 响应作为Promise 第二Request HTTP Data As Observable按钮的响应为Observable 这两个按钮都使用
  • 网页推荐系统

    我正在尝试构建一个推荐系统 该系统会根据用户的操作 谷歌搜索 点击 他还可以明确地对网页进行评分 向用户推荐网页 为了了解谷歌新闻的做法 它会显示来自网络的有关特定主题的新闻文章 用技术术语来说就是集群 但我的目标是相似的 它将是基于用户操
  • 无法在 OS X 上的 Visual Studio Code 中运行命令

    所以我已经启动并运行了 Visual Studio Code 据我所知 我已经安装了所有先决条件 我能够创建一个 ASP NET 5 项目并通过在中键入 dnx web 来运行该网站我的终端 所有这些都有效 我遇到的问题来自 Visual
  • 在 JUnit 中删除文件和目录

    我正在为在目录中创建文件的方法编写测试 我的 JUnit 测试如下所示 Before public void setUp objectUnderTest new ClassUnderTest assign another directory
  • Chrome 打包应用程序具有 onblur 侦听器

    Chrome 打包应用程序是否有任何事件侦听器来判断应用程序是否失去焦点 我正在尝试制作一款游戏 但当我改变焦点时 我似乎无法使其暂停 我尝试了一些不同的方法 例如以下方法 但似乎都不起作用 document onblur pause do
  • 在本地计算机上有效但在服务器上无效的命令?

    我的桌面使用 ubuntu 10 04 服务器使用 Ubuntu 10 04 服务器版本 以下命令 sudo pip install e git http github com facebook python sdk git egg fac
  • 实现接口的数组的隐式类型

    我的印象是 C 编译器将根据它们都可以隐式转换为的类型隐式键入一个数组 编译器生成未找到隐式类型数组的最佳类型 public interface ISomething public interface ISomething2 public
  • 在线图上绘制误差阴影带 - python

    假设我有 25 行这样的代码 x np linspace 0 30 60 y np sin x 6 np pi error np random normal 0 1 0 02 size y shape y1 y np random norm
  • Unity3d 中的 Signalr 和 WebSocketSharp

    我目前已经构建了一个简单的信号中心 我正在将消息从 Unity5 项目推送到其中 鉴于 SignalR2 客户端不适用于 Unity5 我使用 websocketsharp 来拦截 websocket 帧 消息已成功推送到集线器 但是当我尝
  • 选择上一行mysql?

    如果我有一个 mysql 表 其中包含主 ID 和另一个名为 gameScore 的字段 我可以做一些类似的事情 SELECT gameScore FROM table1 WHERE id 100 ORDER BY gameScore AS
  • Oracle VIEW - 列中超过 4000 字节

    我正在使用 SQL 语句的这一部分从 N N 关系中获取信息 目标是获得一个包含如下列的视图 字符串 1 字符串 2 字符串 3 这工作正常 但有时我的列中有超过 4000 字节 SELECT RTRIM XMLAGG xmlelement
  • Linux 等待单个对象?

    这是一段显示问题的代码 main Process process NULL while process cout lt
  • 调整浏览器大小时可以避免浮动元素移动吗?

    我是编码和 CSS 领域的新手 并且注意到当我调整浏览器大小时 所有浮动元素都会移动到右侧 并且用户被迫水平滚动才能查看菜单 首先是否需要防止浮动元素不改变其位置 其次 如果我应该预防的话 有没有办法可以避免这种情况 浮动是一个痛苦的事情
  • 我可以在嵌入饼图的 R 条形图中制作这样的图表吗

    我有以下数据 I II Total A 15 25 40 B 5 45 50 C 15 5 20 R数据输入 group lt c A B C A B C subgroup lt c I I I II II II yvar lt c 15
  • 如何在 Windows 上创建 conda 环境快捷方式

    安装了 Anaconda 后 我得到了anaconda baseWindows 开始菜单上的快捷方式 打开我创建的 virtualenv 例如 myenv 我必须单击anaconda base并输入activate myenv在打开的cmd
  • 如何以编程方式打开“网络连接”窗口

    如何在Win7 XP中使用C 以编程方式打开 网络连接 窗口 使用 shell 执行启动一个新进程 然后运行 NCPA cpl 就像这样 ProcessStartInfo startInfo new ProcessStartInfo NCP
  • 查找 SAP 表 (gridview) 中某个范围的每个单元格值

    我正在尝试从 Excel 文件到 SAP 表中查找特定文本 我尝试了下面的代码 但它给了我错误 无效的下一个控制变量引用 到目前为止 下面是我的代码 set rLastRow rSheet Cells rSheet rows Count A
  • Lua中的“C like struct”用于长缓冲区操作?

    为了 Lua 的简单性和美观性 我想用 Lua 而不是 C 来编写 映射 代码 假设在 C 语言中我可以有以下内容 typedef struct my struct char field 1 10 char field 2 250 char