php 10进制的所有位,php如何把一个20位的62进制的转回10进制字符串

首先,楼主的算法是不对的,因为我用9999999999144705880199999999999和9999999999144705880199999999998这个数测dec62(),发现输出结果是一样的。

我在php手册中看到了大神的算法(需要BCMath支持):

function convBase($numberInput, $fromBaseInput, $toBaseInput){

if ($fromBaseInput==$toBaseInput) return $numberInput;

$fromBase = str_split($fromBaseInput,1);

$toBase = str_split($toBaseInput,1);

$number = str_split($numberInput,1);

$fromLen=strlen($fromBaseInput);

$toLen=strlen($toBaseInput);

$numberLen=strlen($numberInput);

$retval='';

if ($toBaseInput == '0123456789')

{

$retval=0;

for ($i = 1;$i <= $numberLen; $i++)

$retval = bcadd($retval, bcmul(array_search($number[$i-1], $fromBase),bcpow($fromLen,$numberLen-$i)));

return $retval;

}

if ($fromBaseInput != '0123456789')

$base10=convBase($numberInput, $fromBaseInput, '0123456789');

else

$base10 = $numberInput;

if ($base10

return $toBase[$base10];

while($base10 != '0')

{

$retval = $toBase[bcmod($base10,$toLen)].$retval;

$base10 = bcdiv($base10,$toLen,0);

}

return $retval;

}

用法:

1、十进制转62进制

echo convBase('9999999999144705880199999999999','0123456789','0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ');

2、62进制转十进制

echo convBase('3nLqycbr6ZQsN1JJYX','0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ','0123456789');

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值