据我所知,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似乎没有。 谢谢
答案 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,所以最好重新考虑您的整体方法。您的问题中没有足够的信息来提出更准确的建议。