我使用Emscripten将C lib编译成javascript代码。但是当我尝试将它与我的Javascript包装器绑定时,我遇到了一个问题。
我写这篇文章是为了通过引用传递它,我可以通过已编译的lib来访问它。
var str_to_heapu8 = function (str) {
return allocate(intArrayFromString(str), 'i8', ALLOC_NORMAL);
}
但是,我无法将其恢复为正常的javascript字符串...返回值为空字符串。
var heapu8_to_str = function (ptr, len){
var array = new Uint8Array(len);
var i = 0;
while( (ptr+i) < len){
array[i] = getValue(ptr+i, 'i8');
i++;
}
return intArrayToString(array);
}
如何将其转换回javascript字符串?e
答案 0 :(得分:1)
这对我有用:
var heapu8_to_str = function (ptr, len){
return intArrayToString(HEAPU8.subarray(ptr, ptr+len));
};
答案 1 :(得分:1)
缓冲区中项目的大小是8个字节(因为类型是i8),所以你需要在每个条目的getValue中增加指针值8。你只增加1.所以正确的代码会要将代码中的行更改为:
array[i] = getValue(ptr+i*8, 'i8');
答案 2 :(得分:1)
Emscripten(现在?)为此提供了一个JavaScript函数:
Pointer_stringify(ptr)