OCaml Bytes到Bigarray

时间:2016-09-16 14:17:03

标签: ocaml zeromq bytestream

我有一个C程序,在内存中有一个double数组或一个int数组。 C程序使用ZeroMQ将相应的二进制数据发送到OCaml程序。 OCaml程序收到一些bytes,现在我想将这些bytes转换为Array of intArray of float。我怎么能这样做?

1 个答案:

答案 0 :(得分:2)

您可以使用ocplib-endian从字符串中读取原始值。

例如,从double缓冲区中读取string值的函数:

let read_double buf offset =
  (* Multiply by 8 for 8-byte doubles *)
  EndianString.LE.get_double buf (offset * 8)

如果您知道/检查/假设该字符串只是double s,那么您可以使用这样的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)

这都是未经测试的,所以要小心拼写错误!虽然这种实现对于正常使用来说不应该太糟糕,但也有可能使它更有效。