2017-08-15 45 views
1

我用emscripten编译C代码到asm.js 我的C代码:使用Module.HEAP8.set搞的一团糟数据

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

我想一个字节组数据发送到C代码,我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的端部是正确的(I保存文件),但是,中间部分被混乱。我用[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

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

+0

正如我发布,我做了HEAPU8测试。 – funs

+0

我的不好,差别很微妙。 –