OCaml でバイナリデータの読み書き [OCaml]
OCaml の int 型は32ビットではなくて何かの目的で1ビット使われてしまうので実質は31ビットらしい。
これが困るの時というのはバイナリデータを読み書きしたい場合で、あるフィールドが32ビットのバイナリ値となった場合、単純に Pervasive の input_binary_int や output_binary_int を使うわけにはいかない。桁落ちしてしまうからだ。
ではどうすればいいかというと Int32 モジュールを使えばいい。
だが、この Int32 型をバイナリでファイルに出力するような関数は用意されていないので、以下のような関数をいちいち書かないといけない。
let output_int32 out_channel i =
output_byte out_channel (Int32.to_int (Int32.shift_right i 24));
output_byte out_channel (Int32.to_int (Int32.shift_right i 16));
output_byte out_channel (Int32.to_int (Int32.shift_right i 8));
output_byte out_channel (Int32.to_int i)
;;
なんかもっと綺麗にいく方法は無いものか。
コメント 0