Yo!
I needed to decode the hexadecimal substring, so I wrote Hexen, yet another library for encoding and decoding hexadecimal byte sequences.
The main goal of this library is to provide a flexible API for encoding and decoding substrings into any destination (bytes or buffers).
Usage
Hexen provides high-level functions like encode and decode for quick encoding and decoding of strings or substrings.
Hexen.encode "Hello World";;
(* - : string = "48656c6c6f20576f726c64" *)
Hexen.decode "48656c6c6f20576f726c64";;
(* - : string = "Hello World" *)
Hexen.encode_substring "Hello World" 0 5;;
(* - : string = "48656c6c6f" *)
Hexen.decode_substring "48656c6c6f20576f726c64" 0 10;;
(* - : string = "Hello" *)
Also, Hexen provides functions to encode and decode strings or substrings directly into existing buffers or bytes.
let buffer = Buffer.create 16 in
Hexen.encode_to_buffer "Hello" buffer;
Hexen.encode_substring_to_buffer "Hello World" 5 6 buffer;
let bytes = Bytes.create 12 in
Hexen.decode_into (Buffer.contents buffer) 0 bytes 0 22;
Bytes.set bytes 11 '!';
bytes
(* - : bytes = Bytes.of_string "Hello World!" *)