OCaml字节到Bigarray

OCaml字节到Bigarray,ocaml,zeromq,bytestream,Ocaml,Zeromq,Bytestream,我有一个C程序,内存中有一个double数组或int数组。C程序使用ZeroMQ将相应的二进制数据发送到OCaml程序。OCaml程序接收一些字节,现在我想将这些字节转换为int数组或float数组。如何执行此操作?您可以使用从字符串中读取原始值 例如,从字符串缓冲区读取双值值的函数: let read_double buf offset = (* Multiply by 8 for 8-byte doubles *) EndianString.LE.get_double buf (of

我有一个C程序,内存中有一个
double
数组或
int
数组。C程序使用ZeroMQ将相应的二进制数据发送到OCaml程序。OCaml程序接收一些
字节
,现在我想将这些
字节
转换为int数组或float数组。如何执行此操作?

您可以使用从字符串中读取原始值

例如,从
字符串
缓冲区读取
双值
值的函数:

let read_double buf offset =
  (* Multiply by 8 for 8-byte doubles *)
  EndianString.LE.get_double buf (offset * 8)
如果您知道/检查/假设字符串只不过是
double
s,那么您可以像这样使用
read\u 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)

这都是未经测试的,所以要小心打字错误!还有一些可能的方法可以提高它的效率,尽管这个实现对于正常使用来说应该不会太糟糕。

正是我想要的!这个答案很有帮助。