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 compare_endian : endian -> endian -> intval hash_fold_endian : Base.Hash.state -> endian -> Base.Hash.stateval hash_endian : endian -> Base.Hash.hash_valueval sexp_of_endian : endian -> Ppx_sexp_conv_lib.Sexp.tval endian_of_sexp : Ppx_sexp_conv_lib.Sexp.t -> endianval __endian_of_sexp__ : Ppx_sexp_conv_lib.Sexp.t -> endian
val unpack_signed_8 : buf:bytes -> pos:int -> intval pack_signed_8 : buf:bytes -> pos:int -> int -> unitval unpack_unsigned_8 : buf:bytes -> pos:int -> intval pack_unsigned_8 : buf:bytes -> pos:int -> int -> unitval unpack_signed_16 : byte_order:endian -> buf:bytes -> pos:int -> intThe functions ending with
_big_endianor_little_endianare faster than the ones with an explicitbyte_orderargument: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 -> unitval unpack_unsigned_16_big_endian : buf:bytes -> pos:int -> intval unpack_unsigned_16_little_endian : buf:bytes -> pos:int -> intval pack_unsigned_16_big_endian : buf:bytes -> pos:int -> int -> unitval pack_unsigned_16_little_endian : buf:bytes -> pos:int -> int -> unitval unpack_signed_16_big_endian : buf:bytes -> pos:int -> intval unpack_signed_16_little_endian : buf:bytes -> pos:int -> intval pack_signed_16_big_endian : buf:bytes -> pos:int -> int -> unitval pack_signed_16_little_endian : buf:bytes -> pos:int -> int -> unitval unpack_unsigned_16 : byte_order:endian -> buf:bytes -> pos:int -> intval pack_unsigned_16 : byte_order:endian -> buf:bytes -> pos:int -> int -> unitval unpack_signed_32 : byte_order:endian -> buf:bytes -> pos:int -> int32val unpack_signed_32_int : byte_order:endian -> buf:bytes -> pos:int -> intval pack_signed_32 : byte_order:endian -> buf:bytes -> pos:int -> Core_kernel.Int32.t -> unitval pack_signed_32_int : byte_order:endian -> buf:bytes -> pos:int -> int -> unitval unpack_unsigned_32_int_big_endian : buf:bytes -> pos:int -> intval unpack_unsigned_32_int_little_endian : buf:bytes -> pos:int -> intval pack_unsigned_32_int_big_endian : buf:bytes -> pos:int -> int -> unitval pack_unsigned_32_int_little_endian : buf:bytes -> pos:int -> int -> unitval unpack_signed_32_int_big_endian : buf:bytes -> pos:int -> intval unpack_signed_32_int_little_endian : buf:bytes -> pos:int -> intval pack_signed_32_int_big_endian : buf:bytes -> pos:int -> int -> unitval pack_signed_32_int_little_endian : buf:bytes -> pos:int -> int -> unitval unpack_unsigned_32_int : byte_order:endian -> buf:bytes -> pos:int -> intval pack_unsigned_32_int : byte_order:endian -> buf:bytes -> pos:int -> int -> unitval unpack_signed_64 : byte_order:endian -> buf:bytes -> pos:int -> int64val unpack_signed_64_int : byte_order:endian -> buf:bytes -> pos:int -> intval pack_signed_64 : byte_order:endian -> buf:bytes -> pos:int -> Core_kernel.Int64.t -> unitval pack_signed_64_int : byte_order:endian -> buf:bytes -> pos:int -> int -> unitval unpack_signed_64_int_little_endian : buf:bytes -> pos:int -> intval pack_signed_64_int_little_endian : buf:bytes -> pos:int -> int -> unitval unpack_signed_64_int_big_endian : buf:bytes -> pos:int -> intval pack_signed_64_int_big_endian : buf:bytes -> pos:int -> int -> unitval unpack_signed_64_big_endian : buf:bytes -> pos:int -> int64val unpack_signed_64_little_endian : buf:bytes -> pos:int -> int64val pack_signed_64_big_endian : buf:bytes -> pos:int -> int64 -> unitval pack_signed_64_little_endian : buf:bytes -> pos:int -> int64 -> unitval unpack_float : byte_order:endian -> buf:bytes -> pos:int -> floatAs 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
val unpack_tail_padded_fixed_string : ?padding:char -> buf:Core_kernel.Bytes.t -> pos:int -> len:int -> unit -> stringDecode the fixed-length tail-padded string having length
lenfrombufstarting atpos. 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 -> unitEncode and pack the given string as a tail padded fixed length string having length
len. Place it inbufstarting at positionpos. If the length of the string is less thenlenpad it with the padding characters until its length is equal tolen. If the string is longer thanlenraiseInvalid_argument. The default padding is '\x00'.
module Private : sig ... end