2014-04-21 13 views
15

Qualcuno sa di un buon frammento di codice JavaScript per convertire HEX stringhe codificate per Base64 stringhe codificate?HEX al convertitore Base64 per Javascript

+5

btoa (.match "4142434445464748494a4b4c4d4e4f505152535455565758595a" (/ \ w {2} /g).map(function(a){return String.fromCharCode (parseInt (a, 16));}) .join ("")) – dandavis

+0

C'è un '‌ ​ '(zero-width non-joiner seguito da uno spazio a larghezza zero) nel commento di @dandavis, che rende l'errore fallito con l'errore piuttosto criptico" SyntaxError: carattere illegale "in Firefox e" SyntaxError: Unexpected token ILLEGAL " in Chrome. Ecco il codice fisso: 'btoa (" 4142434445464748494a4b4c4d4e4f505152535455565758595a ".match (/ \ w {2}/g) .map (function (a) {return String.fromCharCode (parseInt (a, 16));}) .join (" "))' – waldyrious

+0

** AGGIORNAMENTO: ** Ho provato ad incollare una versione funzionante nel mio commento precedente, ma sembra che sia StackOverflow ad aggiungere i personaggi invisibili - che diavolo ?! Quindi immagino, per ora l'unica soluzione è provare a copiare il codice su un editor che mostra caratteri così invisibili (prova https://www.diffchecker.com/ se non ne hai a portata di mano) e rimuovi il colpevole. Dovrebbe funzionare allora. – waldyrious

risposta

13
if (!window.atob) { 
    var tableStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/"; 
    var table = tableStr.split(""); 

    window.atob = function (base64) { 
    if (/(=[^=]+|={3,})$/.test(base64)) throw new Error("String contains an invalid character"); 
    base64 = base64.replace(/=/g, ""); 
    var n = base64.length & 3; 
    if (n === 1) throw new Error("String contains an invalid character"); 
    for (var i = 0, j = 0, len = base64.length/4, bin = []; i < len; ++i) { 
     var a = tableStr.indexOf(base64[j++] || "A"), b = tableStr.indexOf(base64[j++] || "A"); 
     var c = tableStr.indexOf(base64[j++] || "A"), d = tableStr.indexOf(base64[j++] || "A"); 
     if ((a | b | c | d) < 0) throw new Error("String contains an invalid character"); 
     bin[bin.length] = ((a << 2) | (b >> 4)) & 255; 
     bin[bin.length] = ((b << 4) | (c >> 2)) & 255; 
     bin[bin.length] = ((c << 6) | d) & 255; 
    }; 
    return String.fromCharCode.apply(null, bin).substr(0, bin.length + n - 4); 
    }; 

    window.btoa = function (bin) { 
    for (var i = 0, j = 0, len = bin.length/3, base64 = []; i < len; ++i) { 
     var a = bin.charCodeAt(j++), b = bin.charCodeAt(j++), c = bin.charCodeAt(j++); 
     if ((a | b | c) > 255) throw new Error("String contains an invalid character"); 
     base64[base64.length] = table[a >> 2] + table[((a << 4) & 63) | (b >> 4)] + 
           (isNaN(b) ? "=" : table[((b << 2) & 63) | (c >> 6)]) + 
           (isNaN(b + c) ? "=" : table[c & 63]); 
    } 
    return base64.join(""); 
    }; 

} 

function hexToBase64(str) { 
    return btoa(String.fromCharCode.apply(null, 
    str.replace(/\r|\n/g, "").replace(/([\da-fA-F]{2}) ?/g, "0x$1 ").replace(/ +$/, "").split(" ")) 
); 
} 

function base64ToHex(str) { 
    for (var i = 0, bin = atob(str.replace(/[ \r\n]+$/, "")), hex = []; i < bin.length; ++i) { 
    var tmp = bin.charCodeAt(i).toString(16); 
    if (tmp.length === 1) tmp = "0" + tmp; 
    hex[hex.length] = tmp; 
    } 
    return hex.join(" "); 
} 
+0

Gentile hacker @coder, vedere la mia domanda: http://stackoverflow.com/questions/34963963/converting-a-hex-string-of-a-raw-image -per-a-hex-stringa-di-un-bitmap-image-in-java –

31

Se si lavora in Nodo o utilizzando Browserify, è possibile utilizzare

var base64String = new Buffer(hexString, 'hex').toString('base64') 

o

var hexString = new Buffer(base64String, 'base64').toString('hex') 
10

L'ottimo commento di @dandavis viene modificato da StackOverflow, e ha qualche strani personaggi nascosti.

Qui è come uno di linea:

btoa("a6b580481008e60df9350de170b7e728".match(/\w{2}/g).map(function(a){return String.fromCharCode(parseInt(a, 16));}).join("")) 

o:

function hexToBase64(hexstring) { 
    return btoa(hexstring.match(/\w{2}/g).map(function(a) { 
     return String.fromCharCode(parseInt(a, 16)); 
    }).join("")); 
} 

hexToBase64("a6b580481008e60df9350de170b7e728"); 

Entrambi ritorno:

"prWASBAI5g35NQ3hcLfnKA=="