2016-05-29 1 views
1

Мне нужно представить 8-битные целые числа. Я знаю, что char - это 8 бит, но я все еще не уверен, как я буду выполнять такие операции, как добавление или перезарядка. Я придумал:Работа с байтами в OCaml

let (+) x y = Char.chr ((Char.code x + Char.code y) mod 256);; 

но это кажется ужасно неправильным.

Есть ли лучший способ использовать символы для работы с байтами или использовать что-то вроде модуля stdint?

ответ

4

Ну, это не выглядит так ужасно неправильно для меня. Char.code - это функция, которая не генерирует код (функция идентификации), а Char.chr просто проверяет, что вход находится в диапазоне. Таким образом, количество кода в порядке. Поскольку вы делаете mod 256, вы можете использовать Char.unsafe_chr, чтобы получить меньший размер кода.

С другой стороны, модель памяти OCaml такова, что char занимает то же место, что и int. Таким образом, вы не экономите, используя char.

Если вам действительно нужны 8-битные значения, возможно, вы хотите работать с их последовательностями. Для этого вы можете использовать модули Bytes или Bigarray. Модуль Bigarray, в частности, позволяет хранить байты, но обрабатывать их как int с помощью обычных операторов. (Операция магазина Bigarray делает для вас mod 256, т. Е. Она усекает вне диапазона значений.)

 Смежные вопросы

  • Нет связанных вопросов^_^