【发布时间】:2016-04-07 08:53:50
【问题描述】:
我有一个带有偏移量的 Uint8Array,它是从另一个函数接收到的。这包含了我需要的数据,但是在缓冲区的开头还有一些其他的东西支持这个类型化的数组。
实际数据是 32 位整数,我希望将这些数据放在 Int32Array 中。但是转换这似乎并不简单,我目前正在通过以下方式手动进行:
var outputBuffer = new ArrayBuffer(data.length);
var inputByteArray = new Uint8Array(outputBuffer);
for (var i=0; i < data.length; ++i) {
inputByteArray[i] = data[i]
}
var outputInt32Array= new Int32Array(outputBuffer);
仅仅创建一个新的 Int32Array 并传递源 Uint8Array 的直接方法是行不通的:
var outputInt32Array = new Int32Array(data) // data is the Uint8Array with offset
这会产生一个类型化数组,它的行为仍然像 Uint8Array 并分发单个字节,而不是 32 位整数。
通过传入偏移量尝试它也不起作用,我收到错误“RangeError: Int32Array 的起始偏移量应该是 4 的倍数”:
var outputInt32Array = new Int32Array(data.buffer, data.byteOffset, length)
手动复制每个字节是从带偏移量的 Int8Array 中获取 Int32Array 的唯一方法吗?
【问题讨论】:
-
顺便说一句,如果你使用
new Int32Array(data),它会将data中的每个Uint8读入Int32,即将缓冲区的大小增加四倍。