コード例 #1
0
 public static function CustomBaseConvert($sNumberInput, $sFromBaseInput = '0123456789', $sToBaseInput = '0123456789')
 {
     if ($sFromBaseInput === $sToBaseInput) {
         return $sNumberInput;
     }
     $mFromBase = \str_split($sFromBaseInput, 1);
     $mToBase = \str_split($sToBaseInput, 1);
     $aNumber = \str_split($sNumberInput, 1);
     $iFromLen = \strlen($sFromBaseInput);
     $iToLen = \strlen($sToBaseInput);
     $numberLen = \strlen($sNumberInput);
     $mRetVal = '';
     if ($sToBaseInput === '0123456789') {
         $mRetVal = 0;
         for ($iIndex = 1; $iIndex <= $numberLen; $iIndex++) {
             $mRetVal = \bcadd($mRetVal, \bcmul(\array_search($aNumber[$iIndex - 1], $mFromBase), \bcpow($iFromLen, $numberLen - $iIndex)));
         }
         return $mRetVal;
     }
     if ($sFromBaseInput != '0123456789') {
         $sBase10 = \RainLoop\Utils::CustomBaseConvert($sNumberInput, $sFromBaseInput, '0123456789');
     } else {
         $sBase10 = $sNumberInput;
     }
     if ($sBase10 < \strlen($sToBaseInput)) {
         return $mToBase[$sBase10];
     }
     while ($sBase10 !== '0') {
         $mRetVal = $mToBase[\bcmod($sBase10, $iToLen)] . $mRetVal;
         $sBase10 = \bcdiv($sBase10, $iToLen, 0);
     }
     return $mRetVal;
 }