SSブログ

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)
;;

なんかもっと綺麗にいく方法は無いものか。


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。