使用Module.HEAP8.set获取混乱数据

时间:2017-08-15 07:50:42

标签: javascript emscripten

我使用emscripten将c代码编译成asm.js 我的c代码是这样的:

 int _call_main(char* p, int number)//p is the start arrary, number is the lengh

我想将一个bytearray数据发送到c代码,My Js代码如下:

var decode_encode_audio = Module.cwrap('_call_main', 'number', ['array','number']);
........
var byteArray = new Uint8Array(message.data);//audio data
var offset = Module._malloc(70000);
Module.HEAP8.set(byteArray, offset);
decode_encode_audio(offset , byteArray.length);

在C代码中,我打印了点p数组,我得到了一个混乱的数据,p的开始部分和结束部分是正确的(我保存文件),但是,在中间部分是messed.I replace带[Module.HEAPU8.set]的函数(Module.HEAP8.set)也出错了。我不知道为什么?

我更改了Js代码:

var decode_encode_audio = Module.cwrap('_call_main', 'number', ['number','number']);//not array
........
var byteArray = new Uint8Array(message.data);//audio data
//var offset = Module._malloc(70000);
//Module.HEAP8.set(byteArray, offset);
decode_encode_audio(byteArray, byteArray.length); 

我得到了正确的数据。

任何人都可以告诉我“Module.HEAP8.set”方法有什么问题。

1 个答案:

答案 0 :(得分:0)

您正在将Uint8Array中的未签名数据写入签名视图HEAP8。您应该使用HEAPU8,它用于无符号数据。