2

我使用 Emscripten 将 C 库编译成 javascript 代码。但是,当我尝试将它与我的 Javascript 包装器绑定时遇到了问题。

我写这个是为了通过引用传递它,我可以通过编译的库来访问它。

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

4

3 回答 3

1

这对我有用:

var heapu8_to_str = function (ptr, len){
    return intArrayToString(HEAPU8.subarray(ptr, ptr+len));
};
于 2013-05-23T21:30:10.920 回答
1

Emscripten(现在?)为此提供了一个 JavaScript 函数:

Pointer_stringify(ptr)
于 2014-04-10T23:15:48.847 回答
0

缓冲区中项目的大小为 8 个字节(因为类型是 i8),因此您需要将每个条目的 getValue 中的指针值增加 8。您只增加 1。所以正确的代码是更改您的代码中的行是:

array[i] = getValue(ptr+i*8, 'i8');
于 2013-12-26T14:13:10.947 回答