Lua Pack

lua-users home
wiki


[!] 版本须知: 以下代码与较旧的 Lua 版本 Lua 4 相关。它在 Lua 5 下无法直接运行。

描述

这是一个用于打包和解包二进制数据的简单 Lua 模块。packlib 基于 Luiz Henrique de Figueiredo 的 pack 库 [1]。我只是根据自己的需求修改了模板格式,并将其转换为了一个 Lua 模块(参见 LuaBinaryModules)。

它导出了两个函数:bpack 和 bunpack。

bpack 的调用方式如下:bpack(F,x1,x2,...), 其中 F 是一个描述值 x1, x2, ... 如何被解释和格式化的字符串。F 中的每个字母都会消耗一个值。bpack 理解的字母代码如下:

bpack 返回一个(二进制)字符串,其中包含 F 中描述的已打包值。

bunpack 的调用方式如下:bunpack(s,F,[init]), 其中 s 是一个由 pack 打包的(二进制)字符串,F 是一个描述要从 s 中读取内容的字符串,可选的 init 指定了从 s 的哪个位置开始读取值。

bunpack 为 F 中的每个字母返回一个值(字母代码与 bpack 相同);bpack 还返回 s 中下一个未读取位置的索引,该索引可用作后续 bunpack 调用中的 init 位置。如果 bunpack 返回的位置超出了 s 的末尾,那么当然不应该再调用 bunpack,否则将引发错误。

示例

以下代码读取 tga 文件的头部

header = read( file, 18 )

id_length, colormap_type, image_type,
colormap_index, colormap_length,
colormap_size, 
x_origin, y_origin, width, height,
pixel_size, attributes, num = bunpack( header, 'CCCSSCSSSSCC' )

下载

二进制文件

[Win32 DLL] | [GNU/Linux-i386 .so]

注意:win32 二进制文件是使用 [MinGW] gcc 编译器构建的。

注意:win32 二进制文件已更新为使用 lua-4.0.dll 而不是静态链接它

源代码

[packlib.zip]

[packlib.tar.gz]

更新的源代码(适用于 5.0 和 5.1)可在以下地址找到:[http://www.tecgraf.puc-rio.br/~lhf/ftp/lua/]


RecentChanges · preferences
编辑 · 历史
最后编辑于 2007 年 10 月 31 日下午 3:43 GMT (差异)