Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 如何在WebAssembly中将字符串写入内存_String_Webassembly - Fatal编程技术网

String 如何在WebAssembly中将字符串写入内存

String 如何在WebAssembly中将字符串写入内存,string,webassembly,String,Webassembly,我是这样开始工作的: // example.wast (module (memory (export "mem") 1)) // example.js WebAssembly.instantiateStreaming(fetch('example.wasm'), {}).then(mod => { var exports = mod.instance.exports var i8 = new Uint8Array(exports.mem) var ra = 100 v

我是这样开始工作的:

// example.wast
(module
  (memory (export "mem") 1))

// example.js
WebAssembly.instantiateStreaming(fetch('example.wasm'), {}).then(mod => {
  var exports = mod.instance.exports
  var i8 = new Uint8Array(exports.mem)
  var ra = 100
  var rb = 500
  var rc = 1000
  var rd = 1200
  var re = 2000
  exports.copy(0, ra)
  exports.copy(ra, rb)
  exports.copy(rb, rc)
  exports.copy(rc, rd)
  exports.copy(rd, re)
  console.log(ra, getString(ra, i8))
  console.log(rb, getString(rb, i8))
  console.log(rc, getString(rc, i8))
  console.log(rd, getString(rd, i8))
  console.log(re, getString(re, i8))
})

function getString(index, buffer) {
  var s = ''
  for (var i = index; i < index + size; i++) {
    s += String.fromCharCode(buffer[i])
  }
  return s
}
或者,如果不是这样,你必须这样做:

function loadString(index, string, buffer) {
  for (var i = 0, n = string.length; i < n; i++) {
    buffer[index + i] = string[i]
  }
}
函数加载字符串(索引、字符串、缓冲区){
for(变量i=0,n=string.length;i
或者更好:

function loadString(index, string, buffer) {
  for (var i = 0, n = string.length; i < n; i++) {
    exports.loadChar(index + i, string[i])
  }
}
函数加载字符串(索引、字符串、缓冲区){
for(变量i=0,n=string.length;i
想知道如何在WebAssembly中导出.loadChar或导出.loadString
,并将字符串加载到内存中的特定位置


我希望避免使用JS,即
buffer[index+I]=string[I]
。也许有一种方法可以动态加载到
数据
段中,这将允许
导出。loadString

WebAssembly没有自己的用于读取/写入线性内存的实用函数,因此没有导出的
导出.loadString
函数

WebAssembly导出对线性内存本身的引用,您可以将其作为类型化数组进行读/写。您已经在此处获得了对它的引用:


var i8=新的Uint8Array(exports.mem)

这将创建一个字节数组,允许您读取/写入从模块导出的名为
mem
的线性内存。您需要对字符串进行编码并将其写入此数组:

var encoder = new TextEncoder();
var encodedString = encoder.encode(str);

var i8 = new Uint8Array(exports.mem)

// Copy the UTF-8 encoded string into the WASM memory.
i8.set(encodedString);

不确定
asBytes.set(encodedString)
来自何处。想知道loadChar如何工作。抱歉-修复了这个问题哦,亲爱的,我没意识到你可以这么做。酷。
var encoder = new TextEncoder();
var encodedString = encoder.encode(str);

var i8 = new Uint8Array(exports.mem)

// Copy the UTF-8 encoded string into the WASM memory.
i8.set(encodedString);