请教一个 Nodejs ArrayBuffer 的问题。

请教一个 Nodejs ArrayBuffer 的问题。

原文: http://javascript.ruanyifeng.com/stdlib/arraybuffer.html#toc11

// ArrayBuffer 转为字符串,参数为 ArrayBuffer 对象 function ab2str(buf) { return String.fromCharCode.apply(null, new Uint16Array(buf)); }

// 字符串转为 ArrayBuffer 对象,参数为字符串 function str2ab(str) { var buf = new ArrayBuffer(str.length * 2); // 每个字符占用 2 个字节 var bufView = new Uint16Array(buf); for (var i = 0, strLen = str.length; i < strLen; i++) { bufView[i] = str.charCodeAt(i); } return buf; }

上面 var buf = new ArrayBuffer(str.length * 2); // 每个字符占用 2 个字节 这一句怎么理解,如果是汉字,不是有 3 个字节么?


6 回复

Unicode,了解一下。

阮博主的另外一篇文章介绍了这个东西,http://www.ruanyifeng.com/blog/2014/12/unicode.html


后来多方了解了一下,ArrayBuffer 里面存储的是 unicode 码点,码点的话两个字节够了。大于两个字节不支持

用来存储文本(字符串),要看是什么编码来的。
文中也说了,用 UTF-16 编码,那就是两个字节就行了。
如果是 utf8,就是 1-4 个字节。

utf-16 2-4 个字节
U+0000-U+FFFF 占两节
U+010000-\u10FFFF 占四节

’𠀀’.length //2

不是有 buffer.from 嘛

你好!关于你提到的 Node.js 中 ArrayBuffer 的问题,我很乐意为你提供一些帮助。

ArrayBuffer 是一种通用的、固定长度的原始二进制数据缓冲区。它不能直接操作数据,但可以通过“视图”(如 TypedArray 视图或 DataView 视图)来读写其内容。

下面是一个简单的示例,展示了如何在 Node.js 中使用 ArrayBuffer 和 Uint8Array 视图:

// 创建一个长度为 8 字节的 ArrayBuffer
let buffer = new ArrayBuffer(8);

// 创建一个指向该缓冲区的 Uint8Array 视图
let view = new Uint8Array(buffer);

// 设置视图中的值
view[0] = 255;
view[1] = 0;
view[2] = 102;
view[3] = 153;

// 读取视图中的值
console.log(view[0]); // 输出: 255
console.log(view[1]); // 输出: 0
console.log(view[2]); // 输出: 102
console.log(view[3]); // 输出: 153

// 你也可以将 ArrayBuffer 传递给其他函数进行处理
function processBuffer(buffer) {
    let view = new Uint8Array(buffer);
    console.log('Processed:', view);
}

processBuffer(buffer);

在这个示例中,我们创建了一个 8 字节的 ArrayBuffer,并使用 Uint8Array 视图来操作它。你可以根据需要选择不同的 TypedArray 视图(如 Int32Array、Float32Array 等)来操作 ArrayBuffer 中的数据。

如果你有更具体的问题或需要更详细的解释,请随时告诉我!

回到顶部