我有一個Uint8Array與我從另一個函數接收到的偏移量。這包含我需要的數據,但在支持此類型數組的緩衝區開始處還有一些其他內容。如何將具有偏移量的Uint8Array轉換爲Int32Array?
實際數據是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)',它會將'Uint8'從'data'讀入'Int32',即緩衝區大小的四倍。 – Bergi