Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Javascript中从字节数组中获取BigInteger_Javascript_Biginteger - Fatal编程技术网

如何在Javascript中从字节数组中获取BigInteger

如何在Javascript中从字节数组中获取BigInteger,javascript,biginteger,Javascript,Biginteger,我的问题是: 我有一个base64编码字符串,非常长(344个字符)。 当我解码这个字符串时,我可以得到一个字节数组 假设我的base64编码字符串是ALVuSLbT 解码后,我得到以下数组:[018111072182211] 我需要获得这个号码:779239339731(原始编码值)。 我知道如何手动执行此操作。 000000000000000000000000000000000000000000000000000000000000 00000000 101101010000000000000

我的问题是:

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

假设我的base64编码字符串是
ALVuSLbT

解码后,我得到以下数组:
[018111072182211]

我需要获得这个号码:779239339731(原始编码值)。
我知道如何手动执行此操作。
000000000000000000000000000000000000000000000000000000000000
00000000 1011010100000000000000000000000000000000
0000000000001101110000000000000000000000000000000
0000000000000000000000001001000000000000000000
000000000000000000000000001101100000000
0000000000000000000000000000011010011

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

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

你可以检查一下


有人能帮我吗?有没有一种方法可以在Javascript中处理这样的事情?

我不明白为什么要麻烦解析-使用BigInteger库

工作JSFIDLE示例-

var指数b64='ALVuSLbT';
var exponentBytes=base64_解码(exponentB64);
var结果=新的BigInteger(0);
var乘数=新的大整数(1);
对于(var i=exponentBytes.length-1;i>=0;i--){
result=result.add(乘数.multiply(指数字节[i]));
乘数=乘数。乘数(256);
}
document.write(result.toString());
函数base64_decode(base64String){
var b64=“abcdefghijklmnopqrstuvxyzabefghijklmnopqrstuvxyz012456789+/=”;
变量h1,h2,h3,h4,o1,o2,o3,位,i=0,字节=[];
做{
h1=b64.indexOf(base64String.charAt(i++));
h2=b64.indexOf(base64String.charAt(i++));
h3=b64.indexOf(base64String.charAt(i++));
h4=b64.indexOf(base64String.charAt(i++));
位=h1>8&0xff;
o3=位&0xff;
字节。推送(o1);
字节。推送(o2);
字节。推送(o3);
}而(i
哦,有那么简单吗?现在让我们使用一些真实世界的例子:编码字符串2/2/9号TBM 5号TBM 6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6号6 class='预期解码号码2193375680159972548308090102456958488006201861096198718514296695598837155187523234655584376234810809892170。。。“你的信息太长了461个字符…”我很抱歉-但这是你的错;您的字符串包含不可见的空unicode字符8204和8203;您说过字符串是base64,但它不是。还有向下投票的答案,它们为给定的数据提供了正确的输出-前进的道路(我甚至使用Microsoft System.Numeric.BigInteger在C#中测试了相同的结果)。
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;
}