我需要表示8位整数。我知道char
是8位,但我仍然不确定如何执行加法或位移等操作。我想出了:
let ( + ) x y = Char.chr ((Char.code x + Char.code y) mod 256);;
但这似乎非常错误。
有没有更好的方法可以使用字符来处理字节,还是应该使用类似stdint模块的东西?
答案 0 :(得分:4)
好吧,我似乎 非常错误。 Char.code
是一个不生成代码(身份函数)的函数,Char.chr
只检查输入是否在范围内。所以代码量是正确的。由于您正在执行mod 256
,因此可以使用Char.unsafe_chr
来使代码大小更小。
另一方面,OCaml的存储器模型使得char
占据与int
相同的空间。因此,使用char
。
如果你真的想要8位值,可能你想要使用它们的序列。为此,您可以使用Bytes
或Bigarray
模块。特别是Bigarray
模块允许您存储字节,但使用常用运算符将它们视为整数。 (Bigarray商店操作会为您执行mod 256
,即它会截断超出范围的值。)