我使用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”方法有什么问题。
答案 0 :(得分:0)
您正在将Uint8Array
中的未签名数据写入签名视图HEAP8
。您应该使用HEAPU8
,它用于无符号数据。