Javascript 如何将具有偏移量的UINT8阵列转换为Int32Array?

Javascript 如何将具有偏移量的UINT8阵列转换为Int32Array?,javascript,typed-arrays,Javascript,Typed Arrays,我有一个UInt8数组,带有从另一个函数接收的偏移量。这包含了我需要的数据,但是在支持这个类型化数组的缓冲区的开头还有一些其他东西 实际数据是32位整数,我希望将该数据保存在Int32Array中。但转换这一点似乎并不简单,我目前正在以以下方式手动执行: var outputBuffer = new ArrayBuffer(data.length); var inputByteArray = new Uint8Array(outputBuffer); for (var i=0; i &l

我有一个UInt8数组,带有从另一个函数接收的偏移量。这包含了我需要的数据,但是在支持这个类型化数组的缓冲区的开头还有一些其他东西

实际数据是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);
这会产生一个类型化数组,该数组的行为仍然类似于Uint8Array,并发出单个字节,而不是32位整数

通过传递偏移量来尝试也不起作用,我得到错误“RangeError:Int32Array的起始偏移量应该是4的倍数”:


手动复制每个字节是否是从具有偏移量的Int8Array中获取Int32Array的唯一方法?

否,您不需要手动将字节从一个数组复制到另一个数组。使用
新的Int32Array(data.buffer,…)
是最好的方法,但是如果您有一个奇怪的偏移量,则需要使用第二个正确对齐的缓冲区。尽管如此,您不必手动复制,只需使用:


如果需要访问与
数据
位于同一缓冲区的Int32s,也可以使用。

否,不需要手动将字节从一个数组复制到另一个数组。使用
新的Int32Array(data.buffer,…)
是最好的方法,但是如果您有一个奇怪的偏移量,则需要使用第二个正确对齐的缓冲区。尽管如此,您不必手动复制,只需使用:


如果您需要访问与
数据
位于同一缓冲区的Int32s,您也可以使用。

顺便说一句,如果您使用
新建Int32Array(data)
,它会将
数据
中的每个
Uint8
读入
Int32
,即将缓冲区的大小增加四倍。顺便说一句,如果您使用
新建Int32Array(data)
,它会将每个
Uint8
读入
,它将
数据中的每个
Uint8
读入
Int32
,即将缓冲区的大小增加四倍。
var outputInt32Array = new Int32Array(data) // data is the Uint8Array with offset
var outputInt32Array = new Int32Array(data.buffer, data.byteOffset, length)
var outputInt32Array = new Int32Array(data.buffer.slice(data.byteOffset), 0, length);