【问题标题】:Reading Data Into Buffer To Access From JavaScript From C将数据读入缓冲区以从 C 中的 JavaScript 访问
【发布时间】:2022-11-11 12:43:54
【问题描述】:

我正在浏览 MDN 上的 WASM 文档,我有兴趣了解如何从 JavaScript 访问 C 中的结构数据。

在the documentation 中,我可以看到以下内容,我需要将数据复制到 C 缓冲区并以某种方式从 JS 端访问该缓冲区。

我不确定如何实施文档的...read data into buffer 部分。

【问题讨论】:

    标签: javascript c buffer webassembly


    【解决方案1】:

    您必须创建内存缓冲区的视图,然后复制字节(或直接从视图访问字节)。使用DataView(可以选择字节序)比ArrayBuffer(使用平台的字节序)更好,因为不是每个运行JavaScript 的平台都很少使用endian,但WebAssembly 存储它的整数always in little endian:

    // have 'memory' (the instance's memory) and 'offset' (number)
    
    // create a view to the whole memory
    let view = new DataView(memory.buffer, 0, memory.byteLength);
    
    // read a little endian 32 bit unsigned int
    let id = view.getUint32(offset, true);
    
    // log
    console.log(id);
    

    您始终可以将数据复制到另一个 DataView 并将其存储“供以后使用”。从内存缓冲区读取时,有些事情要简洁。例如,如果内存随后增长,您的视图可能指向旧内存的缓冲区,因此您将读取/写入过时的缓冲区。

    文档:DataView,DataView.getUint32。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-22
      • 1970-01-01
      • 2012-03-15
      • 1970-01-01
      相关资源
      最近更新 更多