这是我的问题:
我有一个base64编码的字符串,一个很长的字符串(344个字符) 当我解码这个字符串时,我可以获得一个字节数组。
我们说我的base64编码字符串是ALVuSLbT
解码它给我以下数组:[0, 181, 110, 72, 182, 211]
。
我需要获得这个号码:779239339731(原始编码值)
我知道如何手动完成此操作
000000000000000000000000000000000000000000000000
000000001011010100000000000000000000000000000000
000000000000000001101110000000000000000000000000
000000000000000000000000010010000000000000000000
000000000000000000000000000000001011011000000000
000000000000000000000000000000000000000011010011
通过这个简单的例子,我可以轻松地使用parseInt(binaryString,2)并将数字加在一起。但我原来的字符串太大了。
我希望得到一个可以将此数字转换为字符串的大数字(' 779239339731')。 我没有找到办法或者BigInteger / BigNumber javascript库允许我传递一个字节数组来创建BigInteger对象。
您可以查看jsfiddle。
有人可以帮我吗?有没有办法在Javascript中处理这样的事情?
答案 0 :(得分:1)
我不明白为什么要麻烦解析 - 使用BigInteger库https://rawgithub.com/silentmatt/javascript-biginteger/master/biginteger.js
使用jsFiddle示例 - http://jsfiddle.net/svejdo1/sdV8L/
var exponentB64 = 'ALVuSLbT';
var exponentBytes = base64_decode(exponentB64);
var result = new BigInteger(0);
var multiplier = new BigInteger(1);
for(var i = exponentBytes.length - 1; i >= 0; i--) {
result = result.add(multiplier.multiply(exponentBytes[i]));
multiplier = multiplier.multiply(256);
}
document.write(result.toString());
function base64_decode(base64String) {
var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
var h1, h2, h3, h4, o1, o2, o3, bits, i = 0, bytes = [];
do {
h1 = b64.indexOf(base64String.charAt(i++));
h2 = b64.indexOf(base64String.charAt(i++));
h3 = b64.indexOf(base64String.charAt(i++));
h4 = b64.indexOf(base64String.charAt(i++));
bits = h1 << 18 | h2 << 12 | h3 << 6 | h4;
o1 = bits >> 16 & 0xff;
o2 = bits >> 8 & 0xff;
o3 = bits & 0xff;
bytes.push(o1);
bytes.push(o2);
bytes.push(o3);
} while (i < base64String.length);
return bytes;
}