別にPHPに限った話じゃないですが、2進数や16進数を10進数に変換したい場面っていうのは結構多いと思います。あと互いを変換する方法も様々です。
例えば原始的な方法だと自分で変換処理を書いてみるとか、変換用の関数を作ってみるとか・・・
ですがPHPならそんな七面倒なことをせずとも
- 2進数 ⇒ 10進数
- 8進数 ⇒ 10進数
- 16進数 ⇒ 10進数
に変換してくれる専用の関数が用意されています。
ここではこの3つの関数の使い方やコード例についてまとめてみました。
このページの目次
bindec : 2進数を10進数に変換
bindec関数は2進数⇒10進数の変換を行うための関数。返り値は変換された10進数の数値です。
ただしこの関数は2進数表記の文字列しか渡すことができないことに要注意。なので2進数表記された 0b10101010 みたいな値は直接渡せません。
例えば次は2進数から10進数への変換と表示をしているコード例(ちなみに var_export はコード中で使われる形でデータを表示する関数)
1 2 3 4 5 6 7 8 9 10 11 |
$dec = bindec( '10101010' ); var_export( $dec ); /// => 170 $dec = bindec( '11110000' ); var_export( $dec ); /// => 240 $dec = bindec( '11111111' ); var_export( $dec ); /// => 255 |
このコードみたいに bindec に渡す2進数は '10101010' のような文字列であることが必須です。もし 0b10101010 みたいな値を渡してしまった場合は期待通りの結果が返ってきません。
渡す値は「文字列」としての2進数、返ってくる値は「数値」としての10進数であることに注意ですね。
octdec : 8進数を10進数に変換
octdec関数は8進数から10進数の値に変換するための関数
こちらの関数も渡す値は文字列でなくてはいけないことに要注意です。文字列以外はダメなので 01234 みたいな8進数表記の値を直接渡せません。
たとえが次が8進数⇒10進数の変換・表示を行っているコード例
1 2 3 4 5 6 7 8 9 10 11 |
$dec = octdec( '100' ); var_export( $dec ); /// => 64 $dec = octdec( '200' ); var_export( $dec ); /// => 128 $dec = octdec( '400' ); var_export( $dec ); /// => 256 |
'100' とか '200' みたいに文字列としての8進数を渡さなければ正常に変換されません。
あと8進数表記の時と違い '0100' や '0200' のように先頭に 0 を付ける必要はないですが、もし10進数と分かりにくいなら付けてもOKです。
hexdec : 16進数を10進数に変換
最後に紹介するhexdec関数は16進数を10進数に変換する関数
今までの関数同様に渡す値は必ず文字列でなくてはいけないことに注意しましょう。文字列以外はダメなので16進数表記された 0xFFFF みたいな値は渡せません。
例えば次が16進数から10進数に変換・表示しているコード例
1 2 3 4 5 6 7 8 9 10 11 |
$dec = hexdec( '10' ); var_export( $dec ); /// => 16 $dec = hexdec( '100' ); var_export( $dec ); /// => 256 $dec = hexdec( '1000' ); var_export( $dec ); /// => 4096 |
このコードだと少し分かりにくいですが '10' とか '100' が16進数で表された文字列です。
もし10進数と紛らわしい値だった場合は '0x10' とか '0x100' みたいな16進数表記で書いても問題ありません。ただし 0x100 のように文字列でなく直接16進数表記するのはNGです。
ここまでのまとめ
ここまで紹介した関数をまとめると次の通り
- bindec関数
文字列化した2進数を渡すと数値としての10進数を取得できる。ただし 0b10101010 のような2進数表記された値を直に渡すのはNG!
- octdec関数
文字列化した8進数を渡すと数値としての10進数を取得できる。ただし 01234 みたいな8進数表記の値を渡すと予期せぬ値が返ってくるので注意!
- hexdec関数
文字列化した16進数を渡すと数値としての10進数を取得できる。ただし上2つと同じく 0xFFF みたいな16進数表記そのものを渡してはダメ!
octdec関数は使う場面が少なそうですが、他2つについてはそれなりに使う場面が多そうです。
以上PHPで2・8・16進数を10進数に変換する関数についてでした。
補足 : 10進数から2・8・16進数への変換も可能
ここまで紹介してきた関数とは逆にPHPには
- 10進数 ⇒ 2進数
- 10進数 ⇒ 8進数
- 10進数 ⇒ 16進数
という風に10進数から変換する関数もあります。
どういう関数があるかやコード例は次記事で書いた通り
もし逆変換が必要になったならこれらの関数も役に立つはずです。