跳转到内容

Alcor6L/eLua/pack

来自维基教科书,开放的书籍,为开放的世界

此模块允许将数据任意打包到 Lua 字符串中,并将数据从 Lua 字符串中解包。这样,字符串就可以用于以平台无关的方式存储数据。它基于 Luiz Henrique de Figueiredo 的 lpack 模块(进行了一些小的调整)。

此模块的两种方法(packunpack)都使用格式字符串来描述如何打包/解包数据。格式字符串包含一个或多个数据说明符,每个数据说明符都应用于必须打包/解包的单个变量。数据说明符具有以下一般格式

[endianness]<format_specifier>[count]

其中

  • 字节序 是一个可选的字节序标志,它指定将要打包/解包的数字如何在内存中存储。它可以是
   '<' for little endian.
   '>' for big endian.
   '=' for native endian (the platform's endian order, default).
  • 格式说明符 描述将要打包/解包的变量类型。格式说明符区分大小写。此参数的可能值在下表中总结
   'z' zero-terminated string
   'p' string preceded by length byte
   'P' string preceded by length word
   'a' string preceded by length size_t
   'A' string
   'f' float
   'd' double
   'n' Lua number
   'c' char
   'b' byte = unsigned char
   'h' short
   'H' unsigned short
   'i' int
   'I' unsigned int
   'l' long
   'L' unsigned long
  • 计数 是格式说明符的可选计数器。例如,i5 指示代码打包/解包 5 个整数变量,而不是指定单个整数变量的 i

pack.pack

[编辑 | 编辑源代码]

将变量打包到一个字符串中。

packed = pack.pack( format, val1, val2, ..., valn )
  • format - 格式说明符(如这里所述)。
  • val1 - 要打包的第一个变量。
  • val2 - 要打包的第二个变量。
  • valn - 要打包的第 n 个变量。

返回

  • packed - 包含根据格式打包的所有变量的打包表示形式的字符串。

pack.unpack

[编辑 | 编辑源代码]

解包一个字符串

nextpos, val1, val2, ..., valn = pack.unpack( string, format, [ init ] )
  • string - 要解包的字符串。
  • format - 格式说明符(如这里所述)。
  • init - (可选)标记解包应该从字符串中的哪个位置开始(如果没有指定则为 1)。

返回

  • nextpos - 解包后字符串中的位置。
  • val1 - 第一个解包的值。
  • val2 - 第二个解包的值。
  • valn - 第 n 个解包的值。
华夏公益教科书