質問: base_convert($tmp2,36,16); var_dump($tmp3); echo ""; ``` 結果 string(16) "ae130497bdec2f94" string(13) "2nar3567tdusw" string(16) "ae130497bdec3800" どうやら短い場合でも最後の方が合わなくなるみたいです。
回答: PHPの`base_convert`のマニュアルで**警告**されていますが、 > > **警告** 大きな数値で base_convert() を使用すると、 精度が失われてしまうことがあります。これは、内部で使用している "double" や "float" の性質によるものです。詳細な情報や制限については マニュアルの浮動小数点数 のセクションを参照ください。 > > > ということで、`base_convert`は53ビット(IEEE doubleの仮数部)しか精度がありません。 (用意されていれば)GMPはメモリのある限りの桁を扱えますので、gmp_initで16進数表現をGMPに変換して、gmp_strvalで36進数として出力させる、ということができます。