node源码实现——base64转换

base64格式文件可以用来存放小容量的文件(如动态生成的验证码).node中实现了各种编码格式的转换(如utf8,base64).

字符串转换成base64格式流程

  1. 定义chars=’ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/‘.split(‘’);
  2. 将字符串转换成buffer。
  3. buffer每一项转换成二进制。
  4. 将得到的二进制拼接成字符串,再以6个为一组截取成段(因为二进制6个为一组转换成十进制最大为2^6-1=63,刚好能和chars一一对应)。
  5. 每一段转换成十进制,该十进制就对应chars中相应的索引。
  6. 将对应的索引拼接在一起就是base64格式内容。

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function toBase64 (str) {
var chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');
var buffer=new Buffer(str);
var str='';
var arr=[];
//遍历buffer的每一项,转换成二进制
for (var i=0;i<buffer.length;i++) {
var a= buffer[i].toString(2);
str+=a;
}
//对拼接的二进制6个为一组分割,转换成十进制,去chars中查找索引对应值
str.replace(/\d{6}/g,function () {
arr.push(chars[parseInt(arguments[0],2)]);
})
//将结果拼接并输出
return arr.join('');
}