--- Pack and unpack binary data.
--
-- A problem script authors often face is the necessity of encoding values
-- into binary data. For example after analyzing a protocol the starting
-- point to write a script could be a hex dump, which serves as a preamble
-- to every sent packet. Although it is possible to work with the
-- functionality Lua provides, it's not very convenient. Therefore NSE includes
-- Binlib, based on lpack (http://www.tecgraf.puc-rio.br/~lhf/ftp/lua/)
-- by Luiz Henrique de Figueiredo.
--
-- The Binlib functions take a format string to encode and decode binary
-- data. Packing and unpacking are controlled by the following operator
-- characters:
-- * H
hex string
-- * B
bit string
-- * x
null byte
-- * z
zero-terminated string
-- * p
string preceded by 1-byte integer length
-- * P
string preceded by 2-byte integer length
-- * a
string preceded by 4-byte integer length
-- * A
string
-- * f
float
-- * d
double
-- * n
Lua number
-- * c
char (1-byte integer)
-- * C
byte = unsigned char (1-byte unsigned integer)
-- * s
short (2-byte integer)
-- * S
unsigned short (2-byte unsigned integer)
-- * i
int (4-byte integer)
-- * I
unsigned int (4-byte unsigned integer)
-- * l
long (8-byte integer)
-- * L
unsigned long (8-byte unsigned integer)
-- * <
little endian modifier
-- * >
big endian modifier
-- * =
native endian modifier
--
-- Note that the endian operators work as modifiers to all the
-- characters following them in the format string.
module "bin"
--- Returns a binary packed string.
--
-- The format string describes how the parameters (p1
,
-- ...
) will be interpreted. Numerical values following operators
-- stand for operator repetitions and need an according amount of parameters.
-- Operators expect appropriate parameter types.
--
-- Note: on Windows packing of 64-bit values > 2^63 currently
-- results in packing exactly 2^63.
-- @param format Format string, used to pack following arguments.
-- @param ... The values to pack.
-- @return String containing packed data.
function pack(format, ...)
--- Returns values read from the binary packed data string.
--
-- The first return value of this function is the position at which unpacking
-- stopped. This can be used as the init
value for subsequent
-- calls. The following return values are the values according to the format
-- string. Numerical values in the format string are interpreted as repetitions
-- like in pack
, except if used with A
,
-- B
, or H
, in which cases the number tells
-- unpack
how many bytes to read. unpack
stops if
-- either the format string or the binary data string are exhausted.
-- @param format Format string, used to unpack values out of data string.
-- @param data String containing packed data.
-- @param init Optional starting position within the string.
-- @return Position in the data string where unpacking stopped.
-- @return All unpacked values.
function unpack(format, data, init)