十进制与十六进制互转

十六进制转十进制

十进制转十六进制

<?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)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容