OCaml中的位运算

OCaml中的位运算,ocaml,bit-manipulation,Ocaml,Bit Manipulation,用什么方式编写位旋转代码最惯用 奥卡姆?我知道那个很酷的图书馆,但是 虽然这是在某些协议中解析二进制数据的一种很好的方法, 它不支持像xor或移位这样的位操作 我相信该库使用的底层数据结构是 只是OCaml字符串,我知道它是可变的(并且相对而言是可变的) 紧凑型?我想我读到了,没有多少开销 在某处…)字节数组,但您不能方便地执行许多操作 自xor、移位之后,字符串作为字节数组的逐位操作 等等不是在字符上定义的,而是在整数上定义的 类型,因此必须在int和 chars。。。例如,逻辑左移定义为on

用什么方式编写位旋转代码最惯用 奥卡姆?我知道那个很酷的图书馆,但是 虽然这是在某些协议中解析二进制数据的一种很好的方法, 它不支持像xor或移位这样的位操作

我相信该库使用的底层数据结构是 只是OCaml字符串,我知道它是可变的(并且相对而言是可变的) 紧凑型?我想我读到了,没有多少开销 在某处…)字节数组,但您不能方便地执行许多操作 自xor、移位之后,字符串作为字节数组的逐位操作 等等不是在字符上定义的,而是在整数上定义的 类型,因此必须在int和 chars。。。例如,逻辑左移定义为on 字符(字节):

这是我们能做的最好的了吗

假设编译器没有将字符打包到机器字中,这实际上并不低效,与Java中的情况大致相同。。。但是Haskell和标准ML都提供了较小的无符号整数类型,这使得代码更加清晰,IMHO


< P>如果你有很多想要高效打包的位,你可以考虑使用这个库。


我还认为可以使用字符串。额外的函数
Char.code
Char.chr
实际上不会生成任何代码。它们只会导致用新类型重新解释数据。字符串的唯一问题(我能想到)是在32位模型中对字符串大小有一个相当小的限制。我自己已经达到这个极限好几次了。

我在搜索中没有偶然发现这个lib,我来看看。。。谢谢你证实我对
code.chr
.code
的怀疑!
let byte_lsl (x : char) (n : int) : char =
    Char.chr (255 land (Char.code x lsl n))

# byte_lsl '\x0f' 1 ;;
- : char = '\030'