JavaScriptでは違う基数(2進数、16進、etc・・)を10進数に簡単に変換できます。
その方法とは parseInt メソッドに基数で表された文字列と基数を渡して実行すること
例えば変換したいn進数の文字列 xxx を10進数の値 dec に変換したいなら
1 |
var dec = parseInt(xxx, n); |
とすれば10進数変換された数値が取得可能。 普通だと parseInt は文字列 ⇒ 数値の処理を行うために使われますが、基数付きで実行すれば基数同士の変換もできる便利ものです。
ここではこの parseInt を使って2・8・16進数を10進数に変換するコード例をまとめてみました。
2進数を10進数に変換
2進数 ⇒ 10進数 への変換は parseInt の第一引数に2進数文字列、第二引数に 2 を渡すだけ
例えば次が2進数文字列を10進数に変換・表示しているコード例
1 2 3 4 5 6 7 |
var bin = '10101010'; console.log(parseInt(bin, 2)); /// => 170 var bin = '11111111'; console.log(parseInt(bin, 2)); /// => 255 |
'10101010' とか '11111111' のように文字列で表したものが変換可能です。
ただし2進数文字列では 1 または 0 以外の文字は使えないことに要注意。そのため '0b10101010' とか '0o11111111' みたいな文字列は正しい結果を返しません。
先頭に 0b とか 0o を付けられるのは数値として2進数を定義する場合だけです。
8進数を10進数に変換
8進数 ⇒ 10進数 なら parseInt の第一引数に8進数文字列、第二引数に 8 を渡せばOK
例えば次は8進数から10進数に変換・表示しているコード例です。
1 2 3 4 5 6 7 8 9 10 11 |
var oct = '20'; console.log(parseInt(oct, 8)); /// => 16 var oct = '400'; console.log(parseInt(oct, 8)); /// => 256 var oct = '0777'; console.log(parseInt(oct, 8)); /// => 511 |
上コードの '20' とか '400' とかが8進数表記された文字列。もし10進数と分かりにくい場合、最後の例の '0777' みたいに先頭に をつけても問題ありません。
16進数から10進数への変換
16進数 ⇒ 10進数 に変換したい場合は parseInt の第一引数に16進数文字列、第二引数に 16 を渡せば10進数が返ってきます。
例えば次が16進数文字列を10進数に変換・表示しているコード例
1 2 3 4 5 6 7 8 9 10 11 |
var hex = 'FFFF'; console.log(parseInt(hex, 16)); /// => 65535 var hex = '0x100'; console.log(parseInt(hex, 16)); /// => 256 var hex = '0x800' console.log(parseInt(hex, 16)); /// => 2048 |
16進数文字列 hex を10進数変換してコンソール表示してます。ちなみにコメント内に書いたのが10進数に変換された値。
もし16進数文字列が10進数と区別しにくい場合は '0x100' とか '0x800' みたいに先頭に 0x を付けた形でも問題ありません。
ここまでのまとめ
ここまでで紹介した変換方法をまとめると次の通り
- 2進数から10進数への変換
parseInt の第一引数に '11111111' みたいな2進数文字列、第二引数に 2 を渡す
- 8進数から10進数への変換
parseInt の第一引数に '0777' みたいな8進数文字列、第二引数に 8 を渡す
- 16進数から10進数への変換
parseInt の第一引数に '0x800' みたいな16進数文字列、第二引数に 16 を渡す
以上JavaScriptで色々な基数(特に2・8・16進数)を10進数に変換する方法についてでした。
補足 : 10進数から2・8・16進数への変換も可
parseIntメソッドとは逆にある方法を使うと
- 10進数 ⇒ 2進数
- 10進数 ⇒ 8進数
- 10進数 ⇒ 16進数
のように変換することも可能です。
その方法とは次でまとめたようににtoStringメソッドを使うこと
上記事では変換方法に加えてコード例なんかもいくつか紹介したので、10進数 ⇒ n進数 に変換が必要なら是非こちらもご覧ください。