美文网首页
十进制与十六进制互转

十进制与十六进制互转

作者: 建博姓李 | 来源:发表于2018-10-16 18:20 被阅读0次

    十六进制转十进制

    十进制转十六进制

    <?php
    
    class Base36 {
    
        private static $map = ['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'];
    
        /**
         * 10进制转36进制
         * @param   int      $n      十进制数
         * @param   boolean  $upper  是否输出大写
         * @return  string           36进制字符串
         */
        public static function encode ($n, $upper = true) {
    
            $n = intval($n);
            $map = self::$map;
            $divide = count($map);
            $chars = [];
    
            while ($n > 0) {
                $d = $n % $divide;
                $n = ($n - $d) / $divide;
                $chars[] = $map[$d];
            }
    
            $rel = join('', array_reverse($chars));
    
            return $upper ? strtoupper($rel) : $rel;
        }
    
        /**
         * 36进制转10进制
         * @param  string 
         */
        public static function decode (String $code) {
    
            $char = strtolower($code);
            $map = self::$map;
            $c = count($map);
            $len = strlen($char);
            $sum = 0;
    
            for($i = 0; $i < $len; $i++) {
                $index = array_search($char[$i], $map);
    
                $sum += $index * pow($c, $len - $i - 1);
            }
            return $sum;
        }
    }
    

    示例

        $r1 = Base36::encode(10001);
    
        $r2 = Base36::decode($r1);
    
        var_dump($r1, $r2);
    
      // string(3) "7PT"
      //int(10001)
    

    相关文章

      网友评论

          本文标题:十进制与十六进制互转

          本文链接:https://www.haomeiwen.com/subject/bpzhzftx.html