据我所知,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_exact 的第二个参数是bytes
类型(一个可变的 OCaml 字符串(,而 Cstruct.buffer 是一个 8 位整数的大数组。 虽然底层"有效负载"是相同的(无符号字符的字对齐数组;请参阅 Bytes_val 宏(,但 OCaml 级别的"值包装器"是不同的(例如,请参阅 caml_ba_alloc(。
您是否尝试过使用 Lwt_bytes.to_bytes 从一个转换为另一个?
不幸的是,这似乎复制和复制了数据有效负载,因此最好重新考虑您的整体方法。您的问题中没有足够的信息来提出更准确的建议。