0

这是我的问题:

我有一个 base64 编码的字符串,一个很长的字符串(344 个字符)。
当我解码这个字符串时,我可以获得一个字节数组。

假设我的 base64 编码字符串是ALVuSLbT.
解码它给了我以下数组:[0, 181, 110, 72, 182, 211].

我需要获得这个数字:779239339731(原始编码值)。
我知道如何手动执行此操作。
000000000000000000000000000000000000000000000000 000000001011010100000000000000000000000000000000 000000000000000001101110000000000000000000000000 000000000000000000000000010010000000000000000000 000000000000000000000000000000001011011000000000 000000000000000000000000000000000000000011010011

通过这个简单的示例,我可以轻松地使用 parseInt(binaryString, 2) 并将数字相加。但是我的原始字符串太大了。

我想得到一个可以将这个数字转换为字符串('779239339731')的大数字。
我没有找到一种方法来执行此操作,也没有找到允许我传递字节数组来创建 BigInteger 对象的 BigInteger/BigNumber javascript 库。

你可以检查这个jsfiddle

有人可以帮我弄这个吗?有没有办法在Javascript中处理这样的事情?

4

1 回答 1

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;
}
于 2013-06-18T14:54:57.213 回答