十进制转多进制函数

旧城·离人·半城烟
public static function from10_to58($num)
    {
        $to = 58;
        $dict="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
        $dict=str_split($dict);
        $ret = '';
        do {
            $ret = $dict[bcmod($num, $to)] . $ret;
            $num = bcdiv($num, $to);
        } while ($num > 0);
        return $ret;
    }

     public static function from58_to10($str)
    {
        $from = 58;
        $str = strval($str);
        $dict="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
        $len = strlen($str);
        $dec = 0;
        for ($i = 0; $i < $len; $i++) {
            $pos = strpos($dict, $str[$i]);
            $dec = bcadd(bcmul(bcpow($from, $len - $i - 1), $pos), $dec);
        }
        return $dec;
    }
186 1 1
1个评论

gaolool

base_convert
https://www.php.net/manual/zh/function.base-convert.php

<?php
$hexadecimal = 'A37334';
echo base_convert($hexadecimal, 16, 2);
echo  ' ';
echo base_convert($hexadecimal, 16, 10);
  • 旧城·离人·半城烟 11天前

    1.警告:由于使用内部的 "double" 或 "float" 类型,base_convert() 的操作可能会导致大数值中的精度丢失。请参见本手册的 浮点数 章节以便获得更多详细信息。
    2.只能转到36,后面的就不行了

    1. 生成的进制字符可以根据需求来修改 $dict参数中可能会变

旧城·离人·半城烟

586
积分
0
获赞数
0
粉丝数
2019-12-04 加入
🔝