Lua Pack |
|
这是一个用于打包和解包二进制数据的简单 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 而不是静态链接它。
更新的源代码(适用于 5.0 和 5.1)可在以下地址找到:[http://www.tecgraf.puc-rio.br/~lhf/ftp/lua/]