即日起在codingBlog上分享您的技术经验即可获得积分,积分可兑换现金哦。

js base64

编程语言 u013791665 50℃ 0评论

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

转载请注明:CodingBlog » js base64

喜欢 (0)or分享 (0)
发表我的评论
取消评论

*

表情