Ну, это не выглядит так ужасно неправильно для меня. Char.code
- это функция, которая не генерирует код (функция идентификации), а Char.chr
просто проверяет, что вход находится в диапазоне. Таким образом, количество кода в порядке. Поскольку вы делаете mod 256
, вы можете использовать Char.unsafe_chr
, чтобы получить меньший размер кода.
С другой стороны, модель памяти OCaml такова, что char
занимает то же место, что и int
. Таким образом, вы не экономите, используя char
.
Если вам действительно нужны 8-битные значения, возможно, вы хотите работать с их последовательностями. Для этого вы можете использовать модули Bytes
или Bigarray
. Модуль Bigarray
, в частности, позволяет хранить байты, но обрабатывать их как int с помощью обычных операторов. (Операция магазина Bigarray делает для вас mod 256
, т. Е. Она усекает вне диапазона значений.)