/*把一个汉字转化成base64编码的过程:
1.把汉字转化成16进制
2.把16进制转化成2进制
3.把3个8=24位的二进制变成 4个6的二进制
4.把2进制转化成10进制
5.根据Base64编码表转化成base64编码*/
let base64core = ‘ABCDEFGHIJKLMNOPQRSTUVWXYZ’;
base64core += base64core.toLowerCase();
base64core += ‘0123456789’;
base64core += ‘+/’;
function toBase64(text) {
let s2s = […Buffer.from(text).values()].map(value => value.toString(2).padStart(8, ‘0’))
console.log(‘–s2s–>’,s2s)
s2s = s2s.join(”)
const s2List = s2s.match(/(\d{6})|(\d+)/g).map(s2 => s2.padEnd(6, ‘0’))
console.log(‘–s2List–>’,s2List)
const s10List = s2List.map(s2 => parseInt(s2, 2))
console.log(s10List)
const base64 = s10List.map(s10 => base64core[s10]).join(”)
return base64 + (‘=’.repeat((4 – base64.length % 4) % 4))
}
console.log(toBase64(‘你好’))
console.log(‘==================================================’)
function base64ToStr(text) {
text = text.replace(/=+/,”);
const s2s = […text].map(t=>base64core.indexOf(t).toString(2).padStart(6, ‘0’)).join(”)
const s2List = s2s.match(/(\d{8})|(\d+)/g).map(s2 =>s2.padStart(8, ‘0’))
console.log(decodeURIComponent(‘%’+s2List.map(s2=>parseInt( s2,2).toString(16)).join(‘%’)))
}
base64ToStr(‘5L2g5aW9’)