我有一个 C 程序,它在内存中有一个数组double
或int
. C 程序使用 ZeroMQ 将相应的二进制数据发送到 OCaml 程序。OCaml 程序接收到一些bytes
,现在我想将它们bytes
转换成一个Array of int
或一个Array of float
. 我怎样才能做到这一点?
问问题
246 次
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)
如果您知道/检查/假设该字符串只不过是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)
这都是未经测试的,所以要小心拼写错误!也有可能使其更高效的方法,尽管这种实现对于正常使用来说应该不会太糟糕。
于 2016-09-16T22:26:51.243 回答