我有一个C程序,在内存中有一个double
数组或一个int
数组。 C程序使用ZeroMQ将相应的二进制数据发送到OCaml程序。 OCaml程序收到一些bytes
,现在我想将这些bytes
转换为Array of int
或Array of float
。我怎么能这样做?
答案 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)
这都是未经测试的,所以要小心拼写错误!虽然这种实现对于正常使用来说不应该太糟糕,但也有可能使它更有效。