5

PHP を使用して、基数 36 の数値を変換したいと考えています。大きな数値を変換したいので、関数base_convertが機能していません。基数 36 から 10 進数に再度変換すると、最初の数値が得られません。

複数の Web サイトでいくつかの機能を試しましたが、同じ結果が得られません。また、これらの 2 つの Web サイト (Javascript による) では、同じ結果が得られます。

たとえば、1010701001118000000000000000に変換する必要があり3IZS0ZE1RQ68W8SSW4ます。

これが私が試した機能です(そして機能しません):

4

2 に答える 2

9

これは、ウィキペディアにあるアルゴリズムを使用した 2 つの単純な関数であり、bcmath を使用して、非常に大きな数でも正しく計算できます。

function fromDecimalToBase($in, $to) {
    $in = (string) $in;
    $out = '';

    for ($i = strlen($in) - 1; $i >= 0; $i--) {
        $out = base_convert(bcmod($in, $to), 10, $to) . $out;
        $in = bcdiv($in, $to);
    }

    return preg_replace('/^0+/', '', $out);
}

function fromBaseToDecimal($in, $from) {
    $in = (string) $in;
    $out = '';

    for ($i = 0, $l = strlen($in); $i < $l; $i++) {
        $x = base_convert(substr($in, $i, 1), $from, 10);
        $out = bcadd(bcmul($out, $from), $x);
    }

    return preg_replace('/^0+/', '', $out);
}

しかし、私は3izs0ze1rq66tifrpcあなたが提供した数を理解しています - おそらくあなたの変換は間違っていましたか?

于 2012-05-06T16:40:41.893 に答える
3

http://www.pgregg.com/projects/php/base_conversion/base_conversion.php

このページでは、異なる基数間で任意の長さの数値を変換する方法を示します。あなたの例を試してみましたが、両方向で機能するようです。PHPで書かれたソースコードが利用可能です

于 2012-05-06T16:23:08.177 に答える