doubleメモリ内に の配列または の配列を持つ C プログラムがありintます。C プログラムは、ZeroMQ を使用して対応するバイナリ データを OCaml プログラムに送信します。OCaml プログラムはいくつかの を受け取ります。これらをまたはbytesに変換したいと思います。これどうやってするの?bytesArray of intArray of float
1 に答える
2
ocplib-endianを使用して、文字列から生の値を読み取ることができます。
たとえば、バッファdoubleから値を読み取る関数:string
let read_double buf offset =
(* Multiply by 8 for 8-byte doubles *)
EndianString.LE.get_double buf (offset * 8)
文字列がdoubles に他ならないことがわかっている/確認している/想定している場合は、次のread_doubleような関数を使用して配列を作成できます。
let read_array buf =
(* Again, 8 for 8-byte doubles *)
let length = String.length buf / 8 in
Array.init length (fun i -> read_double buf i)
これはすべてテストされていないため、タイプミスに注意してください。この実装は通常の使用にはそれほど悪くはないはずですが、より効率的にする方法も考えられます。
于 2016-09-16T22:26:51.243 に答える