Cstruct и Lwt_bytes - PullRequest
       23

Cstruct и Lwt_bytes

0 голосов
/ 14 октября 2018

Насколько я могу судить, 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 вместо Lwt_bytes для удобства Cstruct.LE, которого, похоже, нет в байтах.Спасибо

1 Ответ

0 голосов
/ 14 октября 2018

Из того, что я могу сказать, второй аргумент Lwt_io.write_from_exactly имеет тип bytes (изменяемая строка OCaml), тогда как Cstruct.buffer является Bigarray8-битные целые числа.Хотя базовые «полезные нагрузки» одинаковы (выровненные по словам массивы беззнаковых символов; см. Макрос Bytes_val ), «оболочки значений» на уровне OCaml различны (см., Например, caml_ba_alloc ).

Вы пытались использовать Lwt_bytes.to_bytes для преобразования из одного в другое?

К сожалению, этот , кажется, дублирует и копируетполезная нагрузка данных , поэтому может быть лучше переосмыслить ваш общий подход.В вашем вопросе недостаточно информации, чтобы сделать более точное предложение.

...