gpt4 book ai didi

javascript - 如何使用 `ArrayBuffer` 从 `bytes` 生成 `js_of_ocaml`

转载 作者:数据小太阳 更新时间:2023-10-29 06:04:31 24 4
gpt4 key购买 nike

我正在构建一个在 Ocaml 中实现并使用 js_of_ocaml 编译为 JavaScript 的 JavaScript 库.

我的一个 Ocaml 函数返回一个带有二进制数据的 string。我如何使用 js_of_ocaml 作为 ArrayBuffer 公开它?

最佳答案

当您编译为 javascript 时,在 string 中操作二进制数据非常容易出错!

根本原因是 js_of_ocaml 的选择有问题:因为 javascript 字符串以 UTF16 编码,而 OCaml 字符串(隐式)以 UTF8 编码,js_of_ocaml 尝试在两者之间导航。因此,当它遇到代码为 > 127 的“字符”时,js_of_ocaml 转换它,如果它实际上是原始二进制数据,那将是一场灾难!

解决方案是操纵 bigstring 而不是 string。Bigstrings 是 (char, Bigarray.int8_unsigned_elt, Bigarray.c_layout)
原始 OCaml 中的 Bigarray.Array1.t
但越来越多的库给它们起了别名。特别是,它们是 js_of_ocaml 中的 Typed_array. Bigstring.t(您可以在其中看到与 ArrayBuffer 相互转换的函数)

如果您的函数一旦用 javascript 编译后就可以在字符串上神奇地工作,那么在多个地方都有 bigstrings 和 strings 之间的转换函数。例如大字符串库:http://c-cube.github.io/ocaml-bigstring/但这些函数也可以在 lwtLwt_bytes 中使用

你可以看到关于同一主题的其他问题(包括在 javascript 中操作 OCaml 字符串的方法,同时使用 gen_js_api 根本不接触它们)在 https://discuss.ocaml.org/t/handling-binary-data-in-ocaml-and-javascript/1519

关于javascript - 如何使用 `ArrayBuffer` 从 `bytes` 生成 `js_of_ocaml`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52365039/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com