【问题标题】:Concatenate or merge TypedArrays in AssemblyScript在 AssemblyScript 中连接或合并 TypedArrays
【发布时间】:2020-04-03 19:43:19
【问题描述】:

我有两个长度为 32 字节的 Uint8Array,我想将它们合并为一个长度为 64 的 Uint8Array。

所以我的问题是:

有没有办法在 AssemblyScript 中将两个 TypedArray 合并成一个新的相同类型的 TypedArray。

我想我正在寻找与 Javascript 中的 TypedArray.set() 方法等效的方法:

var c = new Uint8Array(Uint8Array_1.length + Uint8Array_2.length);
c.set(Uint8Array_1);
c.set(Uint8Array_2, Uint8Array_1.length);

欢迎任何提示!

【问题讨论】:

    标签: typedarray assemblyscript


    【解决方案1】:

    更新

    TypedArray.set 已经登陆 master 和 assemblyscript@nightly 所以你现在可以用通常的方式来做:

    var c = new Uint8Array(a.length + b.length);
    c.set(a);
    c.set(b, a.length);
    

    目前TypedArray.set 尚未实现,但您仍有变体:

    版本 1(JavaScript 方式):

    var a: Int8Array = ...
    var b: Int8Array = ...
    var alen = a.length;
    var blen = b.length;
    var c = new Int8Array(alen + blen);
    for (let i = 0; i < alen; i++) {
      unchecked(c[i] = a[i]);
    }
    for (let i = 0; i < blen; i++) {
      unchecked(c[i + alen] = b[i]);
    }
    

    版本 2(AssemblyScript 方式):

    var a: Int8Array = ...
    var b: Int8Array = ...
    var alen = a.length;
    var blen = b.length;
    var c = new Int8Array(alen + blen);
    var aPtr = a.dataStart;
    var bPtr = b.dataStart;
    var cPtr = c.dataStart;
    memory.copy(cPtr, aPtr, alen);
    memory.copy(cPtr + alen, bPtr, blen);
    

    【讨论】:

    • 谢谢,第 2 版正是我想要的!
    猜你喜欢
    • 1970-01-01
    • 2019-08-12
    • 2013-06-15
    • 2019-12-13
    • 1970-01-01
    • 2014-09-28
    • 2014-10-25
    • 1970-01-01
    相关资源
    最近更新 更多