如何将带偏移量的Uint8Array转换为Int32Array
How can I convert a Uint8Array with offset into an Int32Array?
我有一个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.buffer, …)
是最好的方法,但如果您有一个奇怪的偏移,则需要使用第二个正确对齐的缓冲区。不过,您不必手动复制,只需使用slice
方法即可:
var outputInt32Array = new Int32Array(data.buffer.slice(data.byteOffset), 0, length);
如果需要访问与data
相同缓冲区上的Int32,也可以使用DataView
。
相关文章:
- 如何在JavaScript中将字符串转换为函数引用
- 如何在Javascript中将JSon对象转换为数组
- 使用JS将数组转换为json对象
- 如何使用json将对象列表从java转换为javascript
- 偶尔结结巴巴地说“;堆叠的”;translate()上的转换(v4.0.0-alpha40)
- 为什么在单独的函数中应用时转换会闪烁/断断续续(D3)
- 在Javascript中转换对象数组
- 将数字转换为一定数量的硬币
- 将image src数据:转换为Uint8Array
- 如何将带偏移量的Uint8Array转换为Int32Array
- 在javascript中将字符串转换为Uint8Array
- Firefox操作系统模拟器中的Uint8Array/Uint16Array转换是否已中断
- 如何在javascript中将Uint8Array转换为float
- 如何将Uint8Array从AWS响应转换为.mp4
- 将Uint8Array转换为javascript中的字符串(带中文字符)
- 我如何将Uint8Array数据转换为JS对象
- 将32位整数的非类型数组转换为UInt8Array的最有效方法
- 使用Node JS将Uint8Array转换为流
- 如何将十六进制字符串转换为Uint8Array并返回JavaScript
- 使用JSPDF将网页转换为pdf:'Uint8Array'未定义