我製作了一個函式,可以用來將數字轉換為任何您想要的進位.. 而不是回傳一個預先定義字元索引的字串 (例如 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
函式 gmp_shiftl($x,$n) { return(gmp_mul($x,gmp_pow(2,$n)));
}
函式 gmp_shiftr($x,$n) { return(gmp_div($x,gmp_pow(2,$n)));
}
?>
祝您使用愉快,
Nitrogen.