TzPervasives.Bytes
include module type of Stdlib.Bytes
val to_seq : t -> char Stdlib.Seq.t
val to_seqi : t -> (int * char) Stdlib.Seq.t
val of_seq : char Stdlib.Seq.t -> t
val get_utf_8_uchar : t -> int -> Stdlib.Uchar.utf_decode
val set_utf_8_uchar : t -> int -> Stdlib.Uchar.t -> int
val is_valid_utf_8 : t -> bool
val get_utf_16be_uchar : t -> int -> Stdlib.Uchar.utf_decode
val set_utf_16be_uchar : t -> int -> Stdlib.Uchar.t -> int
val is_valid_utf_16be : t -> bool
val get_utf_16le_uchar : t -> int -> Stdlib.Uchar.utf_decode
val set_utf_16le_uchar : t -> int -> Stdlib.Uchar.t -> int
val is_valid_utf_16le : t -> bool
include module type of Mavryk_stdlib.TzBytes
Bitwise AND on bytes.
If the arguments have different lengths, the prefix of the longer bytes is cut to have the same length as the shorter one before taking bitwise AND.
Example:
logand (Bytes.of_string "\xff\x0f") (Bytes.of_string "\xff") = Bytes.of_string "\x0f"
Bitwise OR on bytes.
If the arguments have different lengths, the shorter bytes is 0-padded on the left to have the same length before taking bitwise OR.
Example:
logor (Bytes.of_string "\xf0\x00") (Bytes.of_string "\x0f") = Bytes.of_string "\xf0\x0f"
Bitwise XOR on bytes.
If the arguments have different lengths, the shorter bytes is 0-padded on the left to have the same length before taking bitwise XOR.
Example:
logxor (Bytes.of_string "\xf0\xff") (Bytes.of_string "\x0f") = Bytes.of_string "\xf0\xf0"
Bitwise NOT on bytes.
Example:
lognot (Bytes.of_string "\xff\xf0\xf0") = Bytes.of_string "\x00\x0f\x0f"
Logical shift left on bytes.
shift_left bs nbits
shifts the byte contents left by nbits
bits, using big-endian encoding. The vacated bits on the right are filled with 0s. The shifted bits are minimally 0-padded on the left in order to keep all the original bits: for example, 0x1234 LSL 1 is 0x002468, instead of 0x2468 (the left most bit is lost) or 0x00002468 (not minimal padding).
shift_left bs nbits
raises Invalid_argument "shift_left"
when nbits < 0
.
Examples:
shift_left (Bytes.of_string "\x12\x34") 0 = Bytes.of_string "\x12\x34"
shift_left (Bytes.of_string "\xff\xff") 1 = Bytes.of_string "\x01\xff\xfe"
shift_left (Bytes.of_string "\x12\x34") 1 = Bytes.of_string "\x00\x24\x68"
(not "\x24\x68"
)shift_left (Bytes.of_string "\x00\x12\x34") 1 = Bytes.of_string "\x00\x00\x24\x68"
(not "\x00\x24\x68"
)shift_left (Bytes.of_string "\x00\x12\x34") 18 = Bytes.of_string "\x00\x48\xd0\x00\x00"
(not "\x48\xd0\x00\x00"
)shift_left Bytes.empty 1 = Bytes.of_string "\x00"
Logical shift right on bytes, using big-endian encoding.
shift_right bs nbits
shifts the byte contents right by nbits
bits, using big-endian encoding. The shifted bits are minimally 0-padded on the left to fit in bytes. For example, 0x123499 LSR 9 is 0xx091a, instead of 0x00091a (not minimal padding).
shift_right bs nbits
raises Invalid_argument "shift_right"
when nbits < 0
.
Examples:
shift_right (Bytes.of_string "\x12\x34") 0 = Bytes.of_string "\x12\x34"
shift_right (Bytes.of_string "\x12\x34") 1 = Bytes.of_string "\x09\x1a"
shift_right (Bytes.of_string "\x12\x34") 8 = Bytes.of_string "\x12"
(not "\x00\x12"
)shift_right (Bytes.of_string "\x12\x34\x99") 9 = Bytes.of_string "\x09\xa"
shift_right (Bytes.of_string "\x12\x34") 18 = Bytes.empty