根据字典,转成相应的进制

改自 博客:短链接生成项目,欢迎各位大佬PR

进行了:

  • 变量唯一
  • PHP 8 风格注释
  • 长语句改为短语句并进行注释

做为备忘📝

<?php

class Test
{
    public string $map = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

    // $map 的长度
    public string $mapLen = '62';

    /**
     * 根据字典,转成相应的进制
     *
     * @param  string  $number 数字
     * @return string
     */
    public function hexTo(string $number): string
    {
        $string = '';

        do {
            $mod = (int) bcmod($number, $this->mapLen);
            $string = $this->map[$mod].$string;
            $number = bcdiv($number, $this->mapLen);
        } while ($number > 0);

        return $string;
    }

    /**
     * 根据字典,转成十进制
     *
     * @param  string  $string 字符串
     * @return int
     */
    public function toDecimal(string $string): int {
        $number = 0;
        $strLen = strlen($string);

        for ($i = 0; $i < $strLen; $i++) {
            $position = strpos($this->map, $string[$i]);
            // 根据当前位数,字符转十进制
            $charToDecimal = bcmul(bcpow($this->mapLen, $strLen - $i - 1), $position);
            // 每个字符累加
            $number = bcadd($charToDecimal, $number);
        }

        return $number;
    }
}

$test = new Test;

echo $test->hexTo(61);
// Z

echo $test->toDecimal('Z');
// 61
本作品采用《CC 协议》,转载必须注明作者和本文链接
无论在现实或是网络中,我都是孤独的。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!