十进制转多进制函数
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;
}
个评论
年代过于久远,无法发表评论
base_convert
https://www.php.net/manual/zh/function.base-convert.php
1.警告:由于使用内部的 "double" 或 "float" 类型,base_convert() 的操作可能会导致大数值中的精度丢失。请参见本手册的 浮点数 章节以便获得更多详细信息。
2.只能转到36,后面的就不行了
这个早就知道了,我这是转36以上的进制