OCamlにビットツイリングコードを書くのに最も慣用的な方法は何ですか?私は非常に涼しいBitstringライブラリについて知っていますが、 これはいくつかのプロトコルでバイナリデータを解析するのに最適な方法ですが、 xorやシフトのようなビット演算はサポートしていません。OCamlのビット演算
私はバイト配列(...と比較的 コンパクト?私はどこかにわずかなオーバーヘッド があることを読んだと思う)そのライブラリが使用する基礎となるデータ構造は、私は変更可能です知っている だけOCamlの文字列であると信じて、 バイト単位の操作は、xor、shifts、 などが文字に定義されていないため、整数型の 型でのみ定義されているため、バイト配列として多くの操作を行うことはできません。したがって、intと chars ...例えば、論理シフトleftに定義されています chars(bytes):
let byte_lsl (x : char) (n : int) : char =
Char.chr (255 land (Char.code x lsl n))
# byte_lsl '\x0f' 1 ;;
- : char = '\030'
これが最善の方法ですか?
コンパイラが機械語にcharsを既にパックしていない場合、これは実際には効率的ではなく、Javaの状況とほぼ同じですが、HaskellとStandard MLは両方とも、はるかに明確なコードで、IMHO。
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
私は検索でそのlibを見つけたことはありませんでした。私は見ていきます。そして、Code.chrと '.code'に関する私の疑惑を確認してくれてありがとう! – spacemanaki