使用OCaml中的字节

时间:2016-05-29 05:11:45

标签: ocaml

我需要表示8位整数。我知道char是8位,但我仍然不确定如何执行加法或位移等操作。我想出了:

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

但这似乎非常错误。

有没有更好的方法可以使用字符来处理字节,还是应该使用类似stdint模块的东西?

1 个答案:

答案 0 :(得分:4)

好吧,我似乎 非常错误。 Char.code是一个不生成代码(身份函数)的函数,Char.chr只检查输入是否在范围内。所以代码量是正确的。由于您正在执行mod 256,因此可以使用Char.unsafe_chr来使代码大小更小。

另一方面,OCaml的存储器模型使得char占据与int相同的空间。因此,使用char

并不会节省太多

如果你真的想要8位值,可能你想要使用它们的序列。为此,您可以使用BytesBigarray模块。特别是Bigarray模块允许您存储字节,但使用常用运算符将​​它们视为整数。 (Bigarray商店操作会为您执行mod 256,即它会截断超出范围的值。)