eLua reference manual - pack


This module allows for arbitrary packing of data into Lua strings and unpacking data from Lua strings. In this way, a string can be used to store data in a platform-indepdendent manner. It is based on the lpack module from Luiz Henrique de Figueiredo (with some minor tweaks).

Both methods of this module (pack and unpack) use a format string to describe how to pack/unpack the data. The format string contains one or more data specifiers, each data specifier is applied to a single variable that must be packed/unpacked. The data specifier has the following general format:

[endianness]<format specifier>[count]


  • endianness is an optional endian flags that specifies how the numbers that are to be packed/unpacked are stored in memory. It can be either:
    1. '<' for little endian.
    2. '>' for big endian.
    3. '=' for native endian (the platform's endian order, default).
  • format specifier describes what kind of variable will be packed/unpacked. The format specifier is case-sensitive. The possible values of this parameter are summarized in the table below:

    Format specifier Corresponding variable type
    '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
  • count is an optional counter for the format specifier. For example, i5 instructs the code to pack/unpack 5 integer variables, as opposed to i that specifies a single integer variable.


packed = pack.pack( format, val1, val2, ..., valn )

Packs variables in a string.


Returns: packed - a string containing the packed representation of all variables according to the format.

nextpos, val1, val2, ..., valn = pack.unpack( string, format, [ init ] )

Unpacks a string



  • nextpos - the position in the string after unpacking.
  • val1 - the first unpacked value.
  • val2 - the second unpacked value.
  • valn - the nth unpacked value.