Cstruct和Lwt_bytes

时间:2018-10-14 08:23:44

标签: ocaml ocaml-lwt

据我所知,Lwt_bytes似乎使用与Cstruct相同的类型(或者可能使用cstruct本身),但是由于某些原因,我无法使它们两者一起工作:

Lwt_io.write_from_exactly out b.Cstruct.buffer 0 16


Error: This expression has type
         Cstruct.buffer =
           (char, Bigarray.int8_unsigned_elt, Bigarray.c_layout)
           Bigarray.Array1.t
       but an expression was expected of type bytes

不是完全相同类型的字节吗?我该如何工作?为了方便Cstruct.LE,我尝试使用Cstruct代替Lwt_bytes,而Cstruct.LE似乎没有。 谢谢

1 个答案:

答案 0 :(得分:3)

据我所知,Lwt_io.write_from_exactly的第二个参数的类型为bytes(可变的OCaml字符串),而Cstruct.buffer是8位整数的Bigarray。 虽然基本的“有效载荷”是相同的(无符号字符的字对齐数组;请参见Bytes_val宏),但OCaml级别的“值包装器”是不同的(例如,参见caml_ba_alloc )。

您是否尝试过使用Lwt_bytes.to_bytes从一个转换为另一个?

不幸的是,这个seems to duplicate and copy the data payload,所以最好重新考虑您的整体方法。您的问题中没有足够的信息来提出更准确的建议。