1

doubleメモリ内に の配列または の配列を持つ C プログラムがありintます。C プログラムは、ZeroMQ を使用して対応するバイナリ データを OCaml プログラムに送信します。OCaml プログラムはいくつかの を受け取ります。これらをまたはbytesに変換したいと思います。これどうやってするの?bytesArray of intArray of float

4

1 に答える 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 に答える