如何在Int16Array的开头加上两个字符

How to prepend two chars at the beginning of an Int16Array?

本文关键字:字符 两个 Int16Array 开头      更新时间:2023-09-26

由于应用程序特定的原因,我需要在现有Int16Array 的开头加上这两个字符"a,"(a和一个逗号)

目前我尝试使用此代码,但它似乎无法正常工作:

function convertFloat32ToInt16(buffer) {
    var prefix          = 'a,',
        prefixLength    = prefix.length / 2, // divided by 2 because we deal with 16 bits, not 8 bits
        bufferLength    = buffer.length,
        totalLength     = prefixLength + bufferLength,
        arr             = new Int16Array(totalLength),
        i
    for (i = 0; i < prefixLength; i = i + 2) {
        arr[i] = prefix.charCodeAt(i) + prefix.charCodeAt(i + 1)
    }
    for (i = prefixLength; i < totalLength; i++) {
        arr[i] = Math.min(1, buffer[i - prefixLength]) * 0x7FFF // convert to 16 bit
    }
    return arr.buffer
}

有什么建议我可以做得更好并修复上面的代码吗?

非常感谢!

如果需要在Int16Array中存储随机字符,为什么要使用它?你这样做是在问问题。

为什么不使用正则数组呢?将arr的定义替换为arr = [],将对buffer的引用替换为arr

在任何情况下,如果要存储随机字符,都需要使用不同的数据结构。你总是可以让你的回程线路像这样:

return {buffer: arr.buffer, type: prefix}