2017-08-15 121 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

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