【问题标题】:Is there a base converter, for bases higher than 36, for PHP?是否有用于 PHP 的基数高于 36 的基数转换器?
【发布时间】:2011-10-30 15:32:15
【问题描述】:

php只有36个base转换器,我需要更多,我找到了代码但它是在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;
    }

【问题讨论】:

  • 注意,请阅读常见问题解答。这个问题不适合 StackOverflow。如果您将问题更改为类似“是否有用于 PHP 的基数高于 36 的基数转换器?”,您可能也会得到更好的答案。
  • 如果您只是在寻找 base 64 编码器:php.net/manual/en/function.base64-encode.php
  • @dtanders 感谢您的链接,但那些 base64 编码器使字符串更长,我的程序只处理编码为自定义 base62 的 base10 数字,使其更短且更易于处理
  • @Pindatjuh hmn...它不仅仅是基本转换器,我也需要那些自定义字母表......:D
  • 我其实是想找一个JS转换器。谢谢!

标签: php javascript converter base


【解决方案1】:
 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" 

【讨论】:

    猜你喜欢
    • 2016-01-13
    • 1970-01-01
    • 1970-01-01
    • 2017-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多