原文: 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 个字节么?
1
oswuhan 2018-08-24 17:34:32 +08:00
|
2
nodejserinwuhan OP @oswuhan 后来多方了解了一下,ArrayBuffer 里面存储的是 unicode 码点,码点的话两个字节够了。大于两个字节不支持
|
3
zbinlin 2018-08-24 19:35:41 +08:00
用来存储文本(字符串),要看是什么编码来的。
文中也说了,用 UTF-16 编码,那就是两个字节就行了。 如果是 utf8,就是 1-4 个字节。 |
4
rabbbit 2018-08-24 19:47:35 +08:00
utf-16 2-4 个字节
U+0000-U+FFFF 占两节 U+010000-\u10FFFF 占四节 '𠀀'.length //2 |
5
lzvezr 2018-08-25 11:36:16 +08:00 via Android
不是有 buffer.from 嘛
|