繁体   English   中英

在 NodeJs 中将 Uint8Array 转换为 Uint16Array

[英]convert Uint8Array into Uint16Array in NodeJs

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

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

您可以从Uint8Array buffer值实例化Uint16Array

const uint8Array = new Uint8Array([1, 164, 5, 57])
const uint16Array = new Uint16Array(uint8Array.buffer)
// Uint16Array(2) [ 41985, 14597 ]

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

如果我正确理解了这个问题,那么我想到的最原生的方式(仍然不是强制转换但需要几行)是转换为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);

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM