10進数<->多進数変換スクリプトを書いてみた。
つい最近まで16進数より上があるって事知りませんでした(汗
例えば62進数とかは0~9、a~z、A~Zの62文字を使って表示するらしいです。
ってことは、$とか%とかの記号も使えば90進数とかそれ以上でも出来ちゃうわけですね!
ってことで作ってみました。
こっちが、10進数->多進数変換用関数。
function dec2multi($str, $charlist = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ') { $charlen = strlen($charlist); $dst = ''; while ($str) { $dst = $charlist[fmod($str, $charlen)] . $dst; $str = floor($str / $charlen); } return strval($dst); }で、こっちが多進数->10進数変換用関数
function multi2dec($str, $charlist = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ') { $charlen = strlen($charlist); $dst = 0; $cnt = strlen($str); for ($i = 0; $i < $cnt; $i++) { $dst += strpos($charlist, $str[$i]) * pow($charlen, $cnt - $i - 1); } return $dst; }
使い方は、以下の通り
第1引数だけ指定した場合は62進数に変換します。
で、第2進数に変換する文字列をいれれば、その文字数の進数変換します。
echo dec2multi("1234567890"); //62進数になります。 echo '<hr />'; echo dec2multi("1234567890", "0123456789abcdef"); //16進数になります。 echo '<hr />'; echo dec2multi("1234567890", "01"); //2進数になります。 echo '<hr />'; echo dec2multi("1234567890", "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!#$%&()-=+*_[]{}@:;~^|/.,<>?"); //90進数になります。 echo '<hr />'; // 以下全てちゃんと10進数にもどります。 echo multi2dec('1ly7vk'); echo '<hr />'; echo multi2dec("499602d2", "0123456789abcdef"); echo '<hr />'; echo multi2dec("1001001100101100000001011010010", "01"); echo '<hr />'; echo multi2dec("i_J+0", "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!#$%&()-=+*_[]{}@:;~^|/.,<>?");
これで、最大94進数くらいまではいけるんじゃないかな。
あ、上記スクリプトはご自由にお使いください。ライセンスは?って聞かれたら、一応MITライセンスじゃない?って回答しときますw
コメントをどうぞ!