Есть ли базовый конвертер для баз выше 36 для PHP? - PullRequest
1 голос
/ 19 августа 2011

PHP имеет только 36 базовых конвертеров, мне нужно больше, я нашел код, но он в js, может кто-нибудь помочь мне перевести его на php?

спасибо.

    function baseConverter (number,ob,nb) {
        // Created 1997 by Brian Risk.  http://brianrisk.com
        //number = number.toUpperCase();
        var list = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
        var dec = 0;
        if(number=="0" || number=="" || number==0){
            number="0";
        }else{
            for (var i = 0; i <=  number.length; i++) {
                dec += (list.indexOf(number.charAt(i))) * (Math.pow(ob , (number.length - i - 1)));
            }
            number = "";
            var magnitude = Math.floor((Math.log(dec))/(Math.log(nb)));
            for (var i = magnitude; i >= 0; i--) {
                var amount = Math.floor(dec/Math.pow(nb,i));
                number = number + list.charAt(amount); 
                dec -= amount*(Math.pow(nb,i));
            }
        }
        return number;
    }

1 Ответ

3 голосов
/ 19 августа 2011
 function baseConverter ($number,$ob,$nb) {
        $list = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
        $dec = 0;
        $number = (string)$number;
        if(empty($number)){
            $number="0";
        }
        else
        {
            $number_len  = strlen($number); 
            for ($i=0; $i<$number_len; $i++)
            {
                $dec += strpos($list, $number[$i])*(pow($ob, ($number_len-$i-1)));
            }
            $number = '';
            $magnitude = floor(log($dec)/log($nb));
            for($i=$magnitude; $i>=0; $i--)
            {
                $amount = floor($dec/pow($nb, $i));
                $number = $number.$list[$amount];
                $dec-= $amount*(pow($nb, $i));
            }
        }
        return $number;
     }

    var_dump( baseConverter("789", 10, 45));    

  will return string(2) "HO" 
...