如何从javascript访问Emscripten类型数组?

时间:2013-05-16 11:30:45

标签: emscripten

我使用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

3 个答案:

答案 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)