Unpack raw vectors

Description

Break a raw vector into chunks according to the values in template.

Usage

1
  unpack(template, ...)

Arguments

template

A string, see 'Details'

...

Raw vector(s) to be unpacked

Details

Currently supported template values are:
'a' - A null padded string (as of R-2.8.0, strings cannot contain embedded nulls)
'A' - A space padded string
'b' - An ascending bit order binary vector, (must be a multiple of 8 long)
'B' - An descending bit order binary vector, (must be a multiple of 8 long)
'C' - An unsigned char (octet) value
'v' - An unsigned short (16-bit) in "VAX" (little-endian) order
'V' - An unsigned long (32-bit) in "VAX" (little-endian) order
'f' - A single-precision float
'd' - A double-precision float
'x' - A null byte
'H' - A raw byte

Values 'a', 'A', and 'H' may be followed by a repeat value. A repeat value of '*' will cause the remainder of the bytes in values to be placed in the last element.

'/' allows packing and unpacking of a sequence of values where the packed structure contains a packed item count followed by the packed items themselves.

If there are more template values or if the repeat count of a field or a group is larger than what the remainder ... allows, unpack returns NULL. If ... is longer than what is described by template, the rest is ignored.

Value

A list with an element for each value in template.

Note

When unpacking, 'A' strips trailing whitespace and nulls and 'a' returns data verbatim (but with embedded nulls removed, since strings cannot contain embedded nulls as of R-2.8.0).

Author(s)

Josh Ulrich

References

http://perldoc.perl.org/functions/unpack.html

See Also

pack

Examples

1
2
3
  (x <- pack('A4 C v A8 V', 'pack', 2, 8, 'sequence', 68098))
  (u1 <- unpack('A4 C H*', x))
  (u2 <- unpack('v/A V', u1[[3]]))

Want to suggest features or report bugs for rdrr.io? Use the GitHub issue tracker.