Monday, May 20, 2024
 Popular · Latest · Hot · Upcoming
119
rated 0 times [  123] [ 4]  / answers: 1 / hits: 49822  / 10 Years ago, mon, april 21, 2014, 12:00:00

Anyone know of a good snippet of JavaScript code to convert HEX encoded strings to base64 encoded strings?


More From » string

 Answers
7
if (!window.atob) {
var tableStr = ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/;
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(/[ rn]+$/, )), 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( );
}

[#71372] Friday, April 18, 2014, 10 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
chelseyn

Total Points: 36
Total Questions: 85
Total Answers: 89

Location: Laos
Member since Fri, Sep 11, 2020
4 Years ago
;