我是靠谱客的博主 可爱篮球,最近开发中收集的这篇文章主要介绍JS之Base64 与String互转,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

/** Convert data (an array of integers) to a Base64 string. */                                        
                                                                                                  
var toBase64Table = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';               
                                                                                                  
var base64Pad = '=';                                                                                  
                                                                                                
                                                                                                      
                                                                                                 
function toBase64(data) {                                                                             
                                                                                                 
    var result = '';                                                                                  
                                                                                                 
    var length = data.length;                                                                         
                                                                                               
    var i;                                                                                            
                                                                                                  
    // Convert every three bytes to 4 ascii characters.                                               
                                                                                                   
    for (i = 0; i < (length - 2); i += 3) {                                                           
                                                                                                   
        result += toBase64Table[data.charCodeAt(i) >> 2];                                             
                                                                                                  
        result += toBase64Table[((data.charCodeAt(i) & 0x03) << 4) + (data.charCodeAt(i+1) >> 4)];    
                                                                                                   
        result += toBase64Table[((data.charCodeAt(i+1) & 0x0f) << 2) + (data.charCodeAt(i+2) >> 6)];  
                                                                                                  
        result += toBase64Table[data.charCodeAt(i+2) & 0x3f];                                         
                                                                                                   
    }                                                                                                 
                                                                                                   
                                                                                                      
                                                                                                  
// Convert the remaining 1 or 2 bytes, pad out to 4 characters.                                   
                                                                                                  
if (length%3) {                                                                                   
                                                                                                  
    i = length - (length%3);                                                                      
                                                                                                  
    result += toBase64Table[data.charCodeAt(i) >> 2];                                             
                                                                                                  
    if ((length%3) == 2) {                                                                        
                                                                                                  
        result += toBase64Table[((data.charCodeAt(i) & 0x03) << 4) + (data.charCodeAt(i+1) >> 4)];
                                                                                                  
        result += toBase64Table[(data.charCodeAt(i+1) & 0x0f) << 2];                              
                                                                                                  
        result += base64Pad;                                                                      
                                                                                                  
    } else {                                                                                      
                                                                                                  
        result += toBase64Table[(data.charCodeAt(i) & 0x03) << 4];                                
                                                                                                  
        result += base64Pad + base64Pad;                                                          
                                                                                                  
    }                                                                                             
                                                                                                  
    }                                                                                                 
                                                                                                  
                                                                                              
                                                                                                  
    return result;                                                                                    
                                                                                                   
}                                                                                                     
                                                                                                   
                                                                                                      
                                                                                                   
/** Convert Base64 data to a string */                                                                
                                                                                                  
var toBinaryTable = [                                                                                 
                                                                                                 
    -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,                                               
                                                                                                  
    -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,                                               
                                                                                                   
    -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,62, -1,-1,-1,63,                                               
                                                                                                   
    52,53,54,55, 56,57,58,59, 60,61,-1,-1, -1, 0,-1,-1,                                               
                                                                                                   
    -1, 0, 1, 2,  3, 4, 5, 6,  7, 8, 9,10, 11,12,13,14,                                               
                                                                                                  
    15,16,17,18, 19,20,21,22, 23,24,25,-1, -1,-1,-1,-1,                                               
                                                                                                   
    -1,26,27,28, 29,30,31,32, 33,34,35,36, 37,38,39,40,                                               
                                                                                                  
    41,42,43,44, 45,46,47,48, 49,50,51,-1, -1,-1,-1,-1                                                
                                                                                                   
];                                                                                                    
                                                                                                  
                                                                                                      
                                                                                                  
function base64ToString(data) {                                                                       
                                                                                                   
    var result = '';                                                                                  
                                                                                                  
    var leftbits = 0; // number of bits decoded, but yet to be appended                               
                                                                                                  
    var leftdata = 0; // bits decoded, but yet to be appended                                         
                                                                                                   
                                                                                                      
                                                                                                   
    // Convert one by one.                                                                            
                                                                                                   
    for (var i = 0; i < data.length; i++) {                                                           
                                                                                                   
        var c = toBinaryTable[data.charCodeAt(i) & 0x7f];                                             
                                                                                                  
        var padding = (data.charCodeAt(i) == base64Pad.charCodeAt(0));                                
                                                                                                   
        // Skip illegal characters and whitespace                                                     
                                                                                                   
        if (c == -1) continue;                                                                        
                                                                                                   
                                                                                                      
                                                                                                  
        // Collect data into leftdata, update bitcount                                                
                                                                                                   
        leftdata = (leftdata << 6) | c;                                                               
                                                                                                  
        leftbits += 6;                                                                                
                                                                                                   
                                                                                                      
                                                                                                   
        // If we have 8 or more bits, append 8 bits to the result                                     
                                                                                                   
        if (leftbits >= 8) {                                                                          
                                                                                                  
            leftbits -= 8;                                                                            
                                                                                                   
            // Append if not padding.                                                                 
                                                                                                  
            if (!padding)                                                                             
                                                                                                  
                result += String.fromCharCode((leftdata >> leftbits) & 0xff);                         
                                                                                                   
            leftdata &= (1 << leftbits) - 1;                                                          
                                                                                                  
        }                                                                                             
                                                                                                   
    }                                                                                                 
                                                                                                   
                                                                                                  
                                                                                                  
    // If there are any bits left, the base64 string was corrupted                                    
                                                                                                  
    if (leftbits)                                                                                     
                                                                                                   
        throw Components.Exception('Corrupted base64 string');                                        
                                                                                                  
                                                                                                      
                                                                                                  
    return result;                                                                                    
                                                                                                   
}                                                                                                     
                                                                                                  
                                                                                                
                                                                                                
var str = "";                                                                                         
                                                                                                  
                                                                                                      
                                                                                                   
for ( var i = 0; i < 8192; i++ )                                                                      
                                                                                                
        str += String.fromCharCode( (25 * Math.random()) + 97 );                                      
                                                                                                   
                                                                                                      
                                                                                                  
for ( var i = 8192; i <= 16384; i *= 2 ) {                                                            
                                                                                                  
                                                                                                      
                                                                                                 
    var base64;                                                                                       
                                                                                                   
                                                                                                      
                                                                                                   
    base64 = toBase64(str);                                                                           
                                                                                                 
    base64ToString(base64);                                                                           
                                                                                                  
                                                                                                  
                                                                                                  
    // Double the string                                                                              
                                                                                                  
    str += str;                                                                                       
                                                                                                   
}                                                                                                     
                                                                                                 
                                                                                               
                                                                                               
toBinaryTable = null;                                                                                 

最后

以上就是可爱篮球为你收集整理的JS之Base64 与String互转的全部内容,希望文章能够帮你解决JS之Base64 与String互转所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部