package core_kernel
Install
Dune Dependency
Authors
Maintainers
Sources
sha256=2e9dec37cf1b1a05fa3ad24ae8efd1e389b82928d598db097771405da1d6b214
md5=ee4f3b03ce7fa4cb0c27e9b02cc7712d
doc/core_kernel.binary_packing/Binary_packing/index.html
Module Binary_packing
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.
val hash_fold_endian :
Ppx_hash_lib.Std.Hash.state ->
endian ->
Ppx_hash_lib.Std.Hash.state
val hash_endian : endian -> Ppx_hash_lib.Std.Hash.hash_value
val sexp_of_endian : endian -> Ppx_sexp_conv_lib.Sexp.t
val endian_of_sexp : Ppx_sexp_conv_lib.Sexp.t -> endian
val __endian_of_sexp__ : Ppx_sexp_conv_lib.Sexp.t -> endian
val unpack_signed_16 : byte_order:endian -> buf:bytes -> pos:int -> int
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
val pack_signed_16 : byte_order:endian -> buf:bytes -> pos:int -> int -> unit
val unpack_unsigned_16 : byte_order:endian -> buf:bytes -> pos:int -> int
val pack_unsigned_16 : byte_order:endian -> buf:bytes -> pos:int -> int -> unit
val unpack_signed_32 : byte_order:endian -> buf:bytes -> pos:int -> int32
val unpack_signed_32_int : byte_order:endian -> buf:bytes -> pos:int -> int
val pack_signed_32 :
byte_order:endian ->
buf:bytes ->
pos:int ->
Core_kernel.Int32.t ->
unit
val pack_signed_32_int :
byte_order:endian ->
buf:bytes ->
pos:int ->
int ->
unit
val unpack_unsigned_32_int : byte_order:endian -> buf:bytes -> pos:int -> int
val pack_unsigned_32_int :
byte_order:endian ->
buf:bytes ->
pos:int ->
int ->
unit
val unpack_signed_64 : byte_order:endian -> buf:bytes -> pos:int -> int64
val unpack_signed_64_int : byte_order:endian -> buf:bytes -> pos:int -> int
val pack_signed_64 :
byte_order:endian ->
buf:bytes ->
pos:int ->
Core_kernel.Int64.t ->
unit
val pack_signed_64_int :
byte_order:endian ->
buf:bytes ->
pos:int ->
int ->
unit
val unpack_float : byte_order:endian -> buf:bytes -> pos:int -> float
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.
val pack_float : byte_order:endian -> buf:bytes -> pos:int -> float -> unit
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_kernel.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_kernel.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'.
module Private : sig ... end