我创建了一个函数,可以用于将数字转换为您想要的任何进制。您不必返回预定义的字符索引字符串(例如 0-9a-z),只需使用它返回的索引数组创建您自己的任何长度即可。
我四处寻找,但没有看到其他人创建过,我需要一个用于只有数字的简单压缩算法,我还没有真正创建它,但这只是一个最初的想法。
<?php
function ConvertBase($Input,$Base=10) {
$Input=gmp_init($Input);
$Result=array();
for($i=0;$i<1||gmp_sign($Input)==1;$i++) {
$Result[]=gmp_intval(gmp_mod($Input,$Base));
$Input=gmp_div_q($Input,$Base);
}
$Result=array_reverse($Result);
return($Result);
}
$Input = '1189998819991197253';
$Chars = '0123456789abcdefghijklmnopqrstuvwxyz';
$Base = strlen($Chars);
$Result = ConvertBase($Input,$Base);
for($i=0;$i<count($Result);$i++)
$Result[$i]=$Chars{$Result[$i]};
printf("gmp_strval: %s\r\n",gmp_strval($Input,36));
printf("BaseConvert: %s\r\n",implode($Result));
?>
这个示例当然显示了一个熟悉的结果,但是这个函数的目的是您可以使用您想要的任何进制,并完全显示您自己的输出以表示任何您选择的数字。
此外,对于那些想要执行按位移位的用户来说,这非常简单。要左移,只需将数字乘以 pow(2,x),要右移,只需除以 pow(2,x)。
<?php
function gmp_shiftl($x,$n) { return(gmp_mul($x,gmp_pow(2,$n)));
}
function gmp_shiftr($x,$n) { return(gmp_div($x,gmp_pow(2,$n)));
}
?>
玩得开心,
氮气。