PHP - Как base_convert () до базы 62

мне нуженbase_convert() функция, которая работает от базы 2 до базы 62, но мне не хватает математики, которую мне нужно использовать, я знаю, что из-за ограничений PHP мне нужно использовать bcmath, что нормально.

функциикак это преобразовать число в и из базы 10 в другую базу до 62, но я хочу реализовать ту же функциональностьbase_convert()Например, единственная функция, которая может преобразовывать произвольные базы.

Я нашелфункция, которая, кажется, делает это, но это дает мне ощущение наличия некоторого избыточного и медленного кода, и я хотел бы немного его подправить, если бы я знал немецкий, а я нет. знак равно

Вот более читаемая версия функции:

function bc_base_convert($value, $quellformat, $zielformat)
{
    $vorrat = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

    if (min($quellformat, $zielformat) < 2)
    {
        trigger_error('Bad Format min: 2', E_USER_ERROR);
    }

    if (max($quellformat, $zielformat) > strlen($vorrat))
    {
        trigger_error('Bad Format max: ' . strlen($vorrat), E_USER_ERROR);
    }

    $dezi = '0';
    $level = 0;
    $result = '';
    $value = trim(strval($value), "\r\n\t +");
    $vorzeichen = '-' === $value{0} ? '-' : '';
    $value = ltrim($value, "-0");
    $len = strlen($value);

    for ($i = 0; $i < $len; $i++)
    {
        $wert = strpos($vorrat, $value{$len - 1 - $i});

        if (FALSE === $wert)
        {
            trigger_error('Bad Char in input 1', E_USER_ERROR);
        }

        if ($wert >= $quellformat)
        {
            trigger_error('Bad Char in input 2', E_USER_ERROR);
        }

        $dezi = bcadd($dezi, bcmul(bcpow($quellformat, $i), $wert));
    }

    if (10 == $zielformat)
    {
        return $vorzeichen . $dezi; // abkürzung
    }

    while (1 !== bccomp(bcpow($zielformat, $level++), $dezi));

    for ($i = $level - 2; $i >= 0; $i--)
    {
        $factor = bcpow($zielformat, $i);
        $zahl = bcdiv($dezi, $factor, 0);
        $dezi = bcmod($dezi, $factor);
        $result .= $vorrat{$zahl};
    }

    $result = empty($result) ? '0' : $result;

    return $vorzeichen . $result;
}

Может кто-нибудь объяснить мне вышеупомянутую функцию или дать мне некоторое представление о процессе прямого преобразования между произвольными основаниями?

Ответы на вопрос(6)

Ваш ответ на вопрос