跳轉到內容

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 個解包的值。
華夏公益教科書