我正在解析使用FileReader.readAsArrayBuffer()读入的文件,如下所示
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中添加空字符。
发布于 2020-07-12 07:11:19
在调用Module._malloc(data.length + 1)之后,在C代码中将最后一个元素设置为null似乎是可行的。@GirkovArpa的回答有点慢(根据console.time(),第一次读取文件慢了10%左右,第二次慢了30%左右)。
发布于 2020-07-12 06:42:54
您可以空终止data本身,以便data_ptr指向一个空终止的char数组
var data = new Uint8Array([...new Uint8Array(reader.result), 0]);https://stackoverflow.com/questions/62855047
复制相似问题