首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Emscripten: null终止Uint8Array?

Emscripten: null终止Uint8Array?
EN

Stack Overflow用户
提问于 2020-07-12 05:59:18
回答 2查看 65关注 0票数 0

我正在解析使用FileReader.readAsArrayBuffer()读入的文件,如下所示

代码语言:javascript
复制
var reader = new FileReader();

reader.onload = function() {
  var data = new Uint8Array(reader.result);
  const data_ptr = Module._malloc(data.length);
  if (data_ptr == null) {
     display_error("Could not allocate " + data.length + " bytes for file " + file.name);
  }
  else {
    Module.HEAPU8.set(data, data_ptr);

    var readSample = cwrap("readSample", "number", ["number", "number"]);
    var ret = readSample(data_ptr, data.length);
    Module._free(data_ptr);
  }
}

reader.readAsArrayBuffer(file);

尽管检查C代码没有超过data.length就好了,如果data_ptr是空终止的就好了。一种想法是调用Module._malloc(data.length + 1)并在C中添加空字符。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-12 07:11:19

在调用Module._malloc(data.length + 1)之后,在C代码中将最后一个元素设置为null似乎是可行的。@GirkovArpa的回答有点慢(根据console.time(),第一次读取文件慢了10%左右,第二次慢了30%左右)。

票数 1
EN

Stack Overflow用户

发布于 2020-07-12 06:42:54

您可以空终止data本身,以便data_ptr指向一个空终止的char数组

代码语言:javascript
复制
var data = new Uint8Array([...new Uint8Array(reader.result), 0]);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62855047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档