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/]