gpt4 book ai didi

ocaml - OCaml 中的按位运算

转载 作者:行者123 更新时间:2023-12-04 17:51:02 30 4
gpt4 key购买 nike


OCaml?我知道非常酷的Bitstring图书馆,但是
虽然这将是在某些协议(protocol)中解析二进制数据的好方法,
它不支持异或或移位等按位运算。

我相信该库使用的底层数据结构是
只是 OCaml 字符串,我知道它是可变的(并且相对
袖珍的?我想我读到的开销很小
某处...)字节数组,但你不能方便地做很多
自 xor 以来将字符串按位运算作为字节数组,移位
等等不是在字符上定义的,而是在整数上定义的
类型,所以你必须在整数和整数之间来回转换
字符...例如,逻辑左移定义在
字符(字节):

let byte_lsl (x : char) (n : int) : char =
Char.chr (255 land (Char.code x lsl n))

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

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

据推测,如果编译器还没有将字符打包成机器字,这实际上并不是低效的,并且与 Java 中的情况大致相同......但是 Haskell 和标准 ML 都提供了更小的无符号整数类型,从而产生了更清晰的代码, 恕我直言。

http://www.standardml.org/Basis/word.html#Word8:STR:SPEC

http://www.haskell.org/ghc/docs/latest/html/libraries/base/Data-Word.html#t:Word8

最佳答案

如果您有很多想要有效打包的位,您可以考虑使用 Bigarray 图书馆。

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

关于ocaml - OCaml 中的按位运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16160332/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com