package core_kernel
Install
Dune Dependency
Authors
Maintainers
Sources
sha256=e37370bad978cfb71fdaf2b1a25ab1506b98ef0b91e0dbd189ffd9d853245ce2
doc/core_kernel.binary_packing/Binary_packing/index.html
Module Binary_packing
Source
Packs and unpacks various types of integers into and from strings.
Functions ending in _int
should not be used in 32-bit programs because native OCaml ints will not be big enough.
pos
arguments refer to the location in the buf string.
We support big- and little-endian ints. Note that for an 8-bit (1-byte) integer, there is no difference, because endian-ness only changes the order of bytes, not bits.
The functions ending with _big_endian
or _little_endian
are faster than the ones with an explicit byte_order
argument:
Name | Run time | S. dev. | Warnings ---------------------------------- | -------- | ------- | -------- pack_signed_16_little_endian | 4 ns | 0 ns | unpack_signed_16_little_endian | 5 ns | 0 ns | pack_signed_32_int | 12 ns | 0 ns | unpack_signed_32_int | 12 ns | 0 ns | pack_signed_32_int_little_endian | 4 ns | 0 ns | unpack_signed_32_int_little_endian | 5 ns | 0 ns | M pack_signed_64_int | 21 ns | 0 ns | M unpack_signed_64_int | 21 ns | 0 ns | M pack_signed_64_little_endian | 8 ns | 0 ns | unpack_signed_64_little_endian | 9 ns | 0 ns | M
As with integers, floats can be be packed big-endian or little-endian, depending on the order in which the bytes of the float are layed out. There is nothing interesting going on computationally from a floating-point perspective, just laying out eight bytes in one order or the other.
The following functions operate on "fixed-length tail-padded strings", by which is meant a string possibly followed by some padding, such that the length of the string plus the length of the padding equals the fixed length.
val unpack_tail_padded_fixed_string :
?padding:char ->
buf:Core.Bytes.t ->
pos:int ->
len:int ->
unit ->
string
Decode the fixed-length tail-padded string having length len
from buf
starting at pos
. Return a string containing only the non-padding characters. The default padding is '\x00'.
val pack_tail_padded_fixed_string :
?padding:char ->
buf:Core.Bytes.t ->
pos:int ->
len:int ->
string ->
unit
Encode and pack the given string as a tail padded fixed length string having length len
. Place it in buf
starting at position pos
. If the length of the string is less then len
pad it with the padding characters until its length is equal to len
. If the string is longer than len
raise Invalid_argument
. The default padding is '\x00'.