OCaml 字节到 Bigarray
OCaml Bytes to Bigarray
我有一个 C 程序,在内存中有一个 double
数组或一个 int
数组。 C 程序使用 ZeroMQ 将相应的二进制数据发送到 OCaml 程序。 OCaml 程序接收到一些 bytes
,现在我想将这些 bytes
转换为 Array of int
或 Array of float
。我该怎么做?
您可以使用 ocplib-endian 从字符串中读取原始值。
例如,从 string
缓冲区读取 double
值的函数:
let read_double buf offset =
(* Multiply by 8 for 8-byte doubles *)
EndianString.LE.get_double buf (offset * 8)
如果您 know/check/assume 字符串只是 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)
这都是未经测试的,所以要小心错别字!也有可能使它更有效率的方法,尽管这个实现对于正常使用来说应该不会太糟糕。
我有一个 C 程序,在内存中有一个 double
数组或一个 int
数组。 C 程序使用 ZeroMQ 将相应的二进制数据发送到 OCaml 程序。 OCaml 程序接收到一些 bytes
,现在我想将这些 bytes
转换为 Array of int
或 Array of float
。我该怎么做?
您可以使用 ocplib-endian 从字符串中读取原始值。
例如,从 string
缓冲区读取 double
值的函数:
let read_double buf offset =
(* Multiply by 8 for 8-byte doubles *)
EndianString.LE.get_double buf (offset * 8)
如果您 know/check/assume 字符串只是 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)
这都是未经测试的,所以要小心错别字!也有可能使它更有效率的方法,尽管这个实现对于正常使用来说应该不会太糟糕。