Nodejs Uint8Array,Uint16Array,Uint32Array

Nodejs Uint8Array,Uint16Array, Uint32Array

我正在尝试弄清楚如何使用 int 中的缓冲区表示。 简单代码

var buffer = Buffer.alloc(4, 'a');
var interface16 = new Uint16Array(buffer);
var interface8 = new Uint8Array(buffer);
console.log(interface16);
console.log(interface8);

为什么日志输出相同的数组(按值和长度)?毕竟,我正在以每个整数 1 和 2 个字节的形式进行数据表示。至少手册上说 Uint8Array - 从缓冲区中取出 1 个字节,我认为这是一个 0 和 1 的序列,在本例中为 32(4 * 8)。也就是说,我可以忍受它是一个包含 4 个元素的数组这一事实。 但是Uint16Array 一个整数占2个字节,也就是这个数一定是不同的,数组的大小是2。 我错了什么,要将哪个缓冲区传递给这些构造函数以便直观地看到差异? 我怀疑在任何情况下返回的数组的长度都将与字节数相同,或者这与控制台如何生成输出有关。大概。但是没有足够的知识来理解为什么。 感谢您的关注。

P.S。如果你也直接针对这个问题建议一些非脑爆文学,那就太好了。

首先创建一个缓冲区,里面有 4 个 a。

然后你用缓冲区调用这个函数:

文档说:new Uint16Array(object); 当使用对象参数调用时,将创建一个新的类型化数组,就像通过 TypedArray.from() 方法一样。

查看更多:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from

它使用缓冲区的每个字节创建一个包含 4 个 uint16 的数组

a = 0x61 = 97 然后你得到四个 97.

这里是一个成功的缓冲区到 uint16 转换的计算器

在您的示例中,两个类型化数组最终都有 4 个元素,但 Uint8Array 仅使用 4 个字节来表示其内容,而 Uint8Array 使用 8 个。您可以通过检查看到这一点byteLength 属性:

var buffer = Buffer.alloc(4, 'a');
var interface16 = new Uint16Array(buffer);
var interface8 = new Uint8Array(buffer);
console.log('Uint16 length: %d', interface16.length);
console.log('Uint16 byteLength: %d', interface16.byteLength);
console.log('Uint8 length: %d', interface8.length);
console.log('Uint8 byteLength: %d', interface8.byteLength);

输出

Uint16 length: 4
Uint16 byteLength: 8
Uint8 length: 4
Uint8 byteLength: 4

所以类型化数组构造函数正在创建具有与源缓冲区相同数量的 元素 的类型化数组,但是 Uint16Array 构造函数使用两个字节而不是一个字节对于每个元素,用零填充每个元素的高位字节。