定义:
基于64个可打印的字符来表示二进制数据的一种方式。该64个字符为:
1. A~Z;
2. a~z;
3. 0~9;
4. '+', '/';
// base64 对照表
0 A 17 R 34 i 51 z
1 B 18 S 35 j 52 0
2 C 19 T 36 k 53 1
3 D 20 U 37 l 54 2
4 E 21 V 38 m 55 3
5 F 22 W 39 n 56 4
6 G 23 X 40 o 57 5
7 H 24 Y 41 p 58 6
8 I 25 Z 42 q 59 7
9 J 26 a 43 r 60 8
10 K 27 b 44 s 61 9
11 L 28 c 45 t 62 +
12 M 29 d 46 u 63 /
13 N 30 e 47 v
14 O 31 f 48 w
15 P 32 g 49 x
16 Q 33 h 50 y转化步骤:
1. 将待转化的字符串转换成二进制格式, 并在前面补一个零。
2. 将二进制每六位分成一组。
3. 在每组二进制前加两个零。
4. 将每组处理过后的二进制转化成十进制。
5. 用十进制去base64表中找对应的字符。
examle
const str = 'Boy';
// 1. 将待转化的字符串转换成二进制格式, 并在前面补一个零。
const code = str.split('').map(item => '0' + item.charCodeAt().toString(2)).join(''); // 010000100110111101111001
// 2. 将二进制每六位分成一组。
const arr = [];
for (let i = 0; i < code.length; i += 6) {
arr.push(code.slice(i, i + 6))
} // arr => ["010000", "100110", "111101", "111001"]
// 3. 在每组二进制前加两个零。
const arr2 = arr.map(item => '00' + item); // arr2 => ["00010000", "00100110", "00111101", "00111001"]
// 4. 将每组处理过后的二进制转化成十进制。
const arr3 = arr2.map(item => parseInt(item, 2)); // arr3 => [16, 38, 61, 57]
// 5. 用十进制去base64表中找对应的字符。
[16, 38, 61, 57] => 'Qm95'
所以 'Boy'的base64编码为'Qm95'
参考链接