我想使用PHP转换基数为36的数字。函数base_convert
无法正常工作,因为我想转换大数字:如果我将它从基数36再次转换为十进制,我就不会得到我的初始数字。
我在多个网站上尝试了一些功能,但我从来没有得到相同的结果。此外,这两个网站(在Javascript中)给出了相同的结果:
例如,1010701001118000000000000000
必须转换为3IZS0ZE1RQ68W8SSW4
。
以下是我尝试过的功能(哪些功能无效):
答案 0 :(得分:8)
以下是使用维基百科上的算法的两个简单函数,而使用bcmath来计算甚至非常大的数字:
function fromDecimalToBase($in, $to) {
$in = (string) $in;
$out = '';
for ($i = strlen($in) - 1; $i >= 0; $i--) {
$out = base_convert(bcmod($in, $to), 10, $to) . $out;
$in = bcdiv($in, $to);
}
return preg_replace('/^0+/', '', $out);
}
function fromBaseToDecimal($in, $from) {
$in = (string) $in;
$out = '';
for ($i = 0, $l = strlen($in); $i < $l; $i++) {
$x = base_convert(substr($in, $i, 1), $from, 10);
$out = bcadd(bcmul($out, $from), $x);
}
return preg_replace('/^0+/', '', $out);
}
但是,我提供了3izs0ze1rq66tifrpc
您提供的号码 - 也许您的转换错误了吗?
答案 1 :(得分:3)
http://www.pgregg.com/projects/php/base_conversion/base_conversion.php
此页面显示如何在不同的基数之间转换任意长度数。 我尝试了你的例子,看起来它在两个方向都有效。 用PHP编写的源代码 可以。