The following functions act only on US-ASCII code points, that is on the bytes in range [0x00;0x7F]. The functions can be safely used on UTF-8 encoded strings but they will, of course, only deal with US-ASCII related matters.
of_hex h parses a sequence of US-ASCII (lower or upper cased) hexadecimal digits from h into its corresponding byte sequence. Error n is returned either with n an index in the string which is not a hexadecimal digit or the length of h if it there is a missing digit at the end.
escape s escapes bytes of s to a representation that uses only US-ASCII printable characters. More precisely:
[0x20;0x5B] and [0x5D;0x7E] are left unchanged. These are the printable US-ASCII bytes, except '\\' (0x5C).
[0x00;0x1F], 0x5C and [0x7F;0xFF] are escaped by an hexadecimal"\xHH" escape with H a capital hexadecimal number. These bytes are the US-ASCII control characters, the non US-ASCII bytes and '\\' (0x5C).
Use unescape to unescape. The invariant unescape (escape s) = Ok s holds.
ocaml_string_escape s escapes the bytes of s to a representation that uses only US-ASCII printable characters and according to OCaml's conventions for string literals. More precisely:
'\b' (0x08) is escaped to "\\b" (0x5C,0x62).
'\t' (0x09) is escaped to "\\t" (0x5C,0x74).
'\n' (0x0A) is escaped to "\\n" (0x5C,0x6E).
'\r' (0x0D) is escaped to "\\r" (0x5C,0x72).
'\"' (0x22) is escaped to "\\\"" (0x5C,0x22).
'\\' (0x5C) is escaped to "\\\\" (0x5C,0x5C).
0x20, 0x21, [0x23;0x5B] and [0x5D;0x7E] are left unchanged. These are the printable US-ASCII bytes, except '\"' (0x22) and '\\' (0x5C).
Remaining bytes are escaped by an hexadecimal"\xHH" escape with H an uppercase hexadecimal number. These bytes are the US-ASCII control characters not mentioned above and non US-ASCII bytes.
Use ocaml_unescape to unescape. The invariant ocaml_unescape (ocaml_string_escape s) = Ok s holds.