Fast and efficient encoding and decoding of base16-encoded strings.
Encode a string into base16 form. The result will always be a multiple of 2 bytes in length.
encode "foo" == "666f6f"
Decode a string from base16 form. The first element of the returned tuple contains the decoded data. The second element starts at the first invalid base16 sequence in the original string.
This function operates as lazily as possible over the input chunks. The only instance in which it is non-lazy is if an odd-length chunk ends with a byte that is valid base16.
decode "666f6f" == ("foo", "") decode "66quux" == ("f", "quux") decode "666quux" == ("f", "6quux")