The following functions act only the code points of the ASCII character set, that is on the bytes in the range [0x00;0x7F]. The functions can be safely used on UTF-8 encoded strings but they will, of course, only deal with ASCII related matters.
of_hex' h parses a sequence of 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 ASCII printable characters. More precisely:
[0x20;0x5B] and [0x5D;0x7E] are left unchanged. These are the printable 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 ASCII control characters, the non 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 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 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 ASCII control characters not mentioned above and non ASCII bytes.
Use ocaml_unescape to unescape. The invariant ocaml_unescape (ocaml_string_escape s) = Ok s holds.