js base64

Base64 JavaScript版本 UTF-8 为基准
以下简要说面实现,不说明理论。

  1. 将字符串转二进制
    首先,我们要将待转换的源串转成二进制。

    var unicode = string.charCodeAt(index);

    那么首先通过字符串的##charCodeAt函数获取字符测unicode值

    var binary = unicode.toString(2)

    然后,通过Number.toString(2) 将unicode值转换成二进制。

    因为不同的字符所占字节是不一样的,比如26个字母,它们不管大小写都是占据一个字节。
    又比如汉字在UTF-8中占据着三个字节。如下不同的unicode值对应占据字节的个数,
    以及转换二进制关系

    | Unicode符号范围 | UTF-8编码方式
    n | (十六进制) | (二进制)
    —+———————–+——————————————————
    0000 0000 - 0000 007F | 0xxxxxxx
    0000 0080 - 0000 07FF | 110xxxxx 10xxxxxx
    0000 0800 - 0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
    0001 0000 - 0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
    0020 0000 - 03FF FFFF | 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
    0400 0000 - 7FFF FFFF | 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

  2. 二进制的补齐以及转换unicode对应的二进制格式
    2.1 通过unicode 或者 binary 的值参照上表,不足位数的在前面补0,并且添加前缀。
    2.2 循环取出源串中的字符进行转换并拼接在一块,最后得到源串对应的二进制串。
    2.3 然后循环,间隔6位为一个单位取出二进制串,这样就得到了一个base64字符串的索引对应的二进制indexBinary
    2.4 接着,将二进制转换成10进制

    var index = parseInt(indexBinary, 2);
  3. 对应索引拼接Base64字串

    我们知道Base64字串是由A-Z、a-z、0-9、+、/组成

    var code = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    var base64Char = code.charAt(index);

    这样我们就得到了对应的base64字符。

    由于一个字节是8位,而我们取出的规则是按照6位取的,这样就有可能出现最后一次取值得时候
    不足6位,如下:

    1.0:
    M          
    01001101     一个字节会多出01  那么我们在它后面补0    01001101 0000
    010011 01                                        010011 010000
    
    2.0:
    M        M
    01001101 01001101                   01001101 01001101 00
    010011 010100 1101                  010011 010100 110100

    因为Base64字符的最小单位是四个字符一组,所以上1.0中需要补充两个=,2.0需要补充一个=,即:
    010011 010000
    T Q = =
    2.0的以此类推

    最后拼接得到Base64字串.
    以下提供参考:
    http://download.csdn.net/detail/u013791665/9862535
    http://download.csdn.net/detail/u013791665/9862367

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值