在NodeJs中将Uint8Array转换为Uint16Array

时间:2020-06-02 20:09:32

标签: javascript node.js

我有一个Uint8Array,我想将其转换为Uint16Array,这样Uint8Array中的每个连续对元素都将转换为Uint16值。最后,uint16Array的大小是Uint8Array的一半。因此,我想转换整个数组,而不是每个值。

我发现的唯一解决方案保持相同的长度并更改数组每个元素的基础类型。因此它不是“投射”数组,而是“投射”数组的每个元素,这不是我想要的。

2 个答案:

答案 0 :(得分:0)

您当前的解决方案应该可以正常工作。就像Uint8Array中一样,number中每个元素的“基础类型”是Uint16Array。因此,强制转换整个数组应保留值的类型。

答案 1 :(得分:0)

如果我正确理解了这个问题,我想到的最自然的方法(仍然不是强制转换,但需要几行)是转换为Buffer,而不是转换为Uint16Array

下面的代码片段似乎达到了预期的效果。

const ar8 = new Uint8Array([0, 1, 1, 0, 0, 2, 2, 0]);
const buf = new Buffer(ar8);
const ar16 = new Uint16Array(buf.buffer, buf.byteOffset, buf.byteLength / Uint16Array.BYTES_PER_ELEMENT);

console.log(ar8, buf, ar16);

在我的平台上,转换为little endian;抱歉,但我不知道转换是否在所有平台上都是小端的,还是小/大端转换是取​​决于平台的。