OCaml中的位运算
用什么方式编写位旋转代码最惯用 奥卡姆?我知道那个很酷的图书馆,但是 虽然这是在某些协议中解析二进制数据的一种很好的方法, 它不支持像xor或移位这样的位操作 我相信该库使用的底层数据结构是 只是OCaml字符串,我知道它是可变的(并且相对而言是可变的) 紧凑型?我想我读到了,没有多少开销 在某处…)字节数组,但您不能方便地执行许多操作 自xor、移位之后,字符串作为字节数组的逐位操作 等等不是在字符上定义的,而是在整数上定义的 类型,因此必须在int和 chars。。。例如,逻辑左移定义为on 字符(字节): 这是我们能做的最好的了吗 假设编译器没有将字符打包到机器字中,这实际上并不低效,与Java中的情况大致相同。。。但是Haskell和标准ML都提供了较小的无符号整数类型,这使得代码更加清晰,IMHOOCaml中的位运算,ocaml,bit-manipulation,Ocaml,Bit Manipulation,用什么方式编写位旋转代码最惯用 奥卡姆?我知道那个很酷的图书馆,但是 虽然这是在某些协议中解析二进制数据的一种很好的方法, 它不支持像xor或移位这样的位操作 我相信该库使用的底层数据结构是 只是OCaml字符串,我知道它是可变的(并且相对而言是可变的) 紧凑型?我想我读到了,没有多少开销 在某处…)字节数组,但您不能方便地执行许多操作 自xor、移位之后,字符串作为字节数组的逐位操作 等等不是在字符上定义的,而是在整数上定义的 类型,因此必须在int和 chars。。。例如,逻辑左移定义为on
< 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'