您当前的位置:首页 > 计算机 > 编程开发 > Other

用代码实现把字符串转换成 base64 编码

时间:12-14来源:作者:点击数:

1. btoa

btoa(unescape(encodeURIComponent(this.inText)));

2. 手动实现

function stringToBase64(str) {    // 将字符串转换为二进制数组    let binaryArr = [];    for (let i = 0; i < str.length; i++) {      binaryArr.push(str.charCodeAt(i));    }    // 将二进制数组转换为base64字符串    let base64Str = '';    const base64Table = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';    for (let i = 0; i < binaryArr.length; i += 3) {      let b1 = binaryArr[i];      let b2 = i + 1 < binaryArr.length ? binaryArr[i + 1] : 0;      let b3 = i + 2 < binaryArr.length ? binaryArr[i + 2] : 0;      let c1 = b1 >> 2;      let c2 = ((b1 & 0x03) << 4) | (b2 >> 4);      let c3 = ((b2 & 0x0f) << 2) | (b3 >> 6);      let c4 = b3 & 0x3f;      base64Str += base64Table[c1] + base64Table[c2] + base64Table[c3] + base64Table[c4];    }    // 补全base64字符串的结尾    let paddingCount = (3 - binaryArr.length % 3) % 3;    base64Str = base64Str.slice(0, base64Str.length - paddingCount);    for (let i = 0; i < paddingCount; i++) {      base64Str += '=';    }    return base64Str;}console.log(stringToBase64('hello world') === btoa('hello world'))

Base64 编码是基于 64 个字符 A-Z、a-z、0-9、+、/ 的编码方式,因为2的6次方正好为 64,所以就用 6bit 就可以表示出64个字符,000000 对应 A,000001 对应 B

以每 3 个 字符(1Byte = 8bit)为一组,然后针对每组,首先获取每个字符的 ASCII 编码(字符 'a'=97=01100001 ),然后将 ASCII 编码转换成 8 bit 的二进制,得到一组 3 * 8 = 24 bit 的字节。然后再将这 24 bit 划分为 4 个 6 bit 的字节,并在每个 6 bit 的字节前面都填两个高位 0,得到 4 个 8 bit 的字节,然后将这 4 个 8 bit 的字节转换成十进制,对照 BASE64 编码表 ,得到对应编码后的字符,空位不足补=

解码

将4个字节转换成3个字节,先读入4个6位(用或运算),每次左移6位,再右移3次,每次8位,这样就还原了

注意

base64 不支持中文,所以需要先编码 encodeURI 即可

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
    无相关信息
栏目更新
栏目热门
本栏推荐