Ben 62 tabanına kadar tabanından 2 çalışan bir base_convert()
işlevini gerekiyor ama ben kullanmak gerekir matematik eksik, ben nedeniyle PHP sınırlamaları ben BCMath faydalanmak gerektiğini biliyorum ki gayet iyi.
Fonksiyonlar like these kadar 62 başka tabanına 10 ve taban arasında bir sayı dönüştürmek, ama örneğin, base_convert()
aynı işlevselliğini uygulamak istiyorum: dönüştürmek bir tek fonksiyonu arasındaki keyfi bazlar.
Ben bir function that seems to do this bulduk, ama bana biraz gereksiz ve yavaş kod sahip hissi verir ve Almanca biliyordu eğer ben yok ki, bunu biraz daha oynamak istiyorum. = (
İşte fonksiyonunun daha okunabilir versiyonu:
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;
}
Herkes bana yukarıdaki işlevini açıklamak ya da bana keyfi üsleri arasında doğrudan dönüşüm sürecinde bazı ışıklar verebilir misiniz?