php如何把一个20位的62进制的转回10进制字符串
php如何把一个20位的62进制的转回10进制字符串。
目前通过
function dec62($n) {
$base = 62;
$index = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$ret = '';
for($t = floor(log10($n) / log10($base)); $t >= 0; $t --) {
$a = floor($n / pow($base, $t));
$ret .= substr($index, $a, 1);
$n -= $a * pow($base, $t);
}
return $ret;
}
可以把超长的十进制整数转到62进制,但是由于系统限制,转回来的时候会变成9.9999999991447E+27
这样的数字。
需要一个算法,把超长的62进制转回10进制字符串。
可以用下面这个数字测试9999999999144705880199999999999
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
请使用 BCMath 做任意精度的加减乘除。
首先,楼主的算法是不对的,因为我用9999999999144705880199999999999和9999999999144705880199999999998这个数测dec62(),发现输出结果是一样的。
我在php手册中看到了大神的算法(需要BCMath支持):
用法:
1、十进制转62进制
2、62进制转十进制
它支持任意形式的进制转换,详见 http://php.net/manual/en/function.base-convert.php