PHP5で10進数から62もしくは64進数への変換をしたいのですが、base_convertでは32進数への変換しか対応していません。

そこで質問なのですが、10進数を62もしくは64進数に変換する良い方法/サンプル等を教えていただけませんでしょうか。

回答の条件
  • 1人5回まで
  • 50 ptで終了
  • 登録:2008/09/23 21:28:47
  • 終了:2008/09/30 21:30:03

回答(4件)

<前のツリー | すべて | 次のツリー>
作ってみた GoldenDawn2008/09/24 09:39:10ポイント1pt

Base64 にならって 0~9,A~Z,a~z,+,/ を使う。


function dec_to_b64($decnum) {

$chars = array_merge(range(0,9),range('A','Z'),range('a','z'),array('+','/')) ;

$result = '' ;

for (; $decnum > 0; $decnum = floor($decnum/64)) {

$result = $chars[$decnum%64].$result ;

}

return $result == '' ? '0' : $result ;

}

function b64_to_dec($b64num) {

$chars = array_flip(array_merge(range(0,9),range('A','Z'),range('a','z'),array('+','/'))) ;

$digits = array_reverse(preg_split('//',$b64num, -1, PREG_SPLIT_NO_EMPTY)) ;

$result = 0 ;

for($i = 0; $i < count($digits); ++$i) {

if (!$chars[$digits[$i]]) return false ;

$result += pow(64, $i) * $chars[$digits[$i]] ;

}

return $result ;

}

$dec = 1234567890 ;

$b64 = dec_to_b64($dec) ;

echo $b64."\n" ;

echo b64_to_dec($b64)."\n" ;

echo b64_to_dec('Hatena') ;

<前のツリー | すべて | 次のツリー>

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません