gpt4 book ai didi

php - 将基数 10 转换为基数 62 (a-zA-Z0-9)

转载 作者:IT王子 更新时间:2023-10-29 01:21:11 28 4
gpt4 key购买 nike

我有一个以 10 为基数的数字。是否有办法将它转换为以 62 为基数?

例子:

echo convert(12324324);
// returns Yg3 (fantasy example here)

PHP 的 base_convert()最多可以转换为 36 进制数。

最佳答案

OLD:一个快速而肮脏的解决方案可能是使用这样的函数:

function toChars($number) {
$res = base_convert($number, 10,26);
$res = strtr($res,'0123456789','qrstuvxwyz');
return $res;
}

基本转换将您的数字转换为数字为 0-9a-p 的基数然后你用一个快速的字符替换去掉剩余的数字。

如您所见,该函数很容易可逆。

function toNum($number) {
$res = strtr($number,'qrstuvxwyz','0123456789');
$res = base_convert($number, 26,10);
return $res;
}

顺便问一下,你会用这个函数做什么?


编辑:

根据问题的变化和@jnpcl 的回答,这里有一组函数可以在不使用 pow 和 log 的情况下执行基本转换(它们需要一半的时间来完成测试)。

这些函数仅适用于整数值。

function toBase($num, $b=62) {
$base='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$r = $num % $b ;
$res = $base[$r];
$q = floor($num/$b);
while ($q) {
$r = $q % $b;
$q =floor($q/$b);
$res = $base[$r].$res;
}
return $res;
}

function to10( $num, $b=62) {
$base='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$limit = strlen($num);
$res=strpos($base,$num[0]);
for($i=1;$i<$limit;$i++) {
$res = $b * $res + strpos($base,$num[$i]);
}
return $res;
}

测试:

for ($i = 0; $i<1000000; $i++) {
$x = toBase($i);
$y = to10($x);
if ($i-$y)
echo "\n$i -> $x -> $y";
}

关于php - 将基数 10 转换为基数 62 (a-zA-Z0-9),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4964197/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com