在 OCaml 中使用字节

Working with bytes in OCaml

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

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

但这似乎大错特错了。

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

嗯,对我来说 所以 似乎并没有什么大错。 Char.code 是一个不生成代码的函数(恒等函数),而 Char.chr 只是检查输入是否在范围内。所以代码量是差不多的。既然你在做 mod 256,你可以使用 Char.unsafe_chr,让代码大小更小。

另一方面,OCaml 的内存模型是 charint 占用相同的 space。所以使用 char.

并没有节省多少

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