Uint8Array字节偏移量和无符号字符*

时间:2019-02-26 17:55:18

标签: c++ webassembly

在此功能(https://github.com/migerh/wasm-filter/blob/master/filter.js)中:

function filter(imageData) {
    const bufferPointerIn = 1024,
        {data, width, height} = imageData,
        bufferIn = new Uint8Array(wasmModule.memory.buffer, bufferPointerIn, width * height * 4),
        bufferPointerOut = 2048 + width * height * 4,
        bufferOut = new Uint8Array(wasmModule.memory.buffer, bufferPointerOut, width * height * 4);

    bufferIn.set(data);
    wasmModule.outline_c(bufferPointerIn, bufferPointerOut, width, height);
    data.set(bufferOut);
    return data;
}

bufferPointerInbufferPointerOut根据https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array基本上是byteoffset

如何将其用作指针?我的意思是如何在C语言中将javascript中的整数理解为unsigned char*。谢谢。

1 个答案:

答案 0 :(得分:1)

wasmModule.memory.buffer是代表WASM模块内存的缓冲区。也就是说,从C程序的角度来看,地址X处的值将等于wasmModule.memory.buffer的索引X处的值。

因此,对于wasmModule.memory.buffer是有效索引的任何内容(即介于0(包括0)和wasmModule.memory.buffer.byteLength(不包括)之间的任何整数)将是C程序的有效内存地址。

由于您同时使用bufferPointerInbufferPointerOut作为传递给C函数的指针以及Uint8Array的偏移量,因此这意味着这些数组中的内容将与这些地址处的内存内容(从C程序的角度来看)。