无限大小的基本转换?

Ry-*_*Ry- 7 javascript base-conversion biginteger

我正在尝试使用整数数组在JavaScript中实现BigInt类型.现在每个都有一个256的上限.我已经完成了所有整数操作,但我无法弄清楚如何将BigInt转换为它的字符串表示.当然,简单的方法是:

BigInt.prototype.toString = function(base) {
    var s = '', total = 0, i, conv = [
        ,,
        '01',
        '012',
        '0123',
        '01234',
        '012345',
        '0123456',
        '01234567',
        '012345678',
        '0123456789',
        ,
        ,
        ,
        ,
        ,
        '0123456789abcdef'
    ];
    base = base || 10;

    for(i = this.bytes.length - 1; i >= 0; i--) {
        total += this.bytes[i] * Math.pow(BigInt.ByteMax, this.bytes.length - 1 - i);
    }

    while(total) {
        s = conv[base].charAt(total % base) + s;
        total = Math.floor(total / base);
    }

    return s || '0';
};
Run Code Online (Sandbox Code Playgroud)

但是当BigInts变大时,我将无法通过添加进行转换.如何将base-x数组转换为base-y数组?

Oli*_*rth 1

请参阅我最近在类似问题的答案中给出的示例(它是针对以10为基数到3为基数的,但原理应该是可转移的):C Fast base Convert from Decimal to ternary

总之:

从低到高迭代输入数字。对于每个数字位置,首先计算输出表示形式中的 1000....000 (base-256)(它是之前 256 的幂的 256 倍)。然后将该结果乘以数字,并累加到输出表示形式中。

您将需要在输出表示中执行乘法和加法的例程。乘法例程可以用加法例程来编写。

请注意,我并没有声称这种方法在任何方面都快(我认为它的位数是O(n^2) );我确信有比这更快的算法方法。