构造和 Lwt_bytes

Cstruct and Lwt_bytes

据我所知,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,这些字节似乎没有。 谢谢

据我所知,Lwt_io.write_from_exactly is of type bytes (a mutable OCaml string), whereas a Cstruct.buffer 的第二个参数是 8 位整数的双数组。 虽然基础 "payloads" 是相同的(无符号字符的字对齐数组;请参阅 Bytes_val macro), the "value wrappers" at the OCaml level are different (see, for example, caml_ba_alloc)。

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

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