JavaScriptでは10進数を他の基数(2進数、8進数、16進数、etc・・)に変換することができます。
その方法とは Number.toString メソッドに基数を渡して呼び出しすること
例えば10進数 dec をn新数で表された文字列 xxx に変換したいなら
1 |
var xxx = dec.toString(n); |
とすれば xxx にn進数変換された文字列が取得できるというやり方です。ポイントはただ toString を呼び出すのではなく、 2 とか 16 とかの基数を渡すことですね。
ここではこれを使って10進数を2・8・16進数に変換するやり方やコード例、注意点などについてまとめてみました。
2進数を10進数に変換する
2進数 ⇒ 10進数 の場合は toString(2) を実行すればOK
例えば次が10進数を2進数に変換・表示しているコード例です。
1 2 3 4 5 6 7 8 9 10 11 |
var dec = 128; console.log(dec.toString(2)); /// => 10000000 var dec = 160; console.log(dec.toString(2)); /// => 10100000 var dec = 255; console.log(dec.toString(2)); /// => 11111111 |
返される値は 10000000 とか 10100000 とかの2進数で表記された文字列
気を付けるべきことは toString はNumber型のオブジェクトのメソッドなので直接数値に対しては呼び出せないことです。間違っても 128.toString(2) とか書かないようにしましょう。
あとマイナス値を2進数に直した場合、先頭のマイナス記号は残ることにも要注意
例えば次がマイナス付き10進数を2進数文字列に直しているコード例
1 2 3 |
var dec = -127; console.log(dec.toString(2)); /// => -1111111 |
見ての通り -127 を変換したら -1111111 になってしまっています・・・
もちろんビット演算などを使えばマイナスを含まない形にも直せますが、処理が複雑です。 toString(2) はなるべくマイナスの値に対しては使わない方がいいですね。
8進数を10進数に変換する
10進数 ⇒ 8進数 の場合は toString(8) を実行
例えば次が10進数から8進数への変換・表示を行っているコード例
1 2 3 4 5 6 7 8 9 10 11 |
var dec = 63; console.log(dec.toString(8)); /// => 77 var dec = 511; console.log(dec.toString(8)); /// => 777 var dec = 4095; console.log(dec.toString(8)); /// => 777 |
ちょっと分かりにくいですが、 77 とか 777 とか 7777 は8進数変換された文字列(つまり 0 ~ 7 のみを使って表された文字列)です。
2進数の場合と同じくマイナス(または少数)を渡してしまうと、マイナス記号・小数点はそのまま残ってしまうので整の正数だけに使う方が安全かも
10進数を16進数文字列に変換
10進数 ⇒ 16進数 に変換する場合は toString(16) を実行
例えば次が数値を16進数に変換して表示しているコード例
1 2 3 4 5 6 7 8 9 10 11 |
var dec = 511; console.log(dec.toString(16).toUpperCase()); /// => 1FF var dec = 1023; console.log(dec.toString(16).toUpperCase()); /// => 3FF var dec = 2047; console.log(dec.toString(16).toUpperCase()); /// => 7FF |
上コードのコメントに書いた 1FF とか 3FF とか 7FF が実際に変換された16進数文字列。ちなみに見やすいように toUpperCase で大文字変換もしてます。
ただし今までと同じくマイナス値や小数点を渡してしまった場合、マイナス記号( - )や小数点( . )はそのまま残ってしまうことに注意。
そもそもコード中で16進数を使ってマイナスとか小数を表すことはない(というか表せない)ので正の整数以外には使わない方がいいですね。
ここまでのまとめ
ここまでで紹介した変換方法をまとめると次の通り
- 10進数から2進数への変換
数値から toString(2) を実行。返り値は 10000000 、 10100000 のような2進数文字列
- 10進数から8進数への変換
数値から toString(8) を実行。 返り値は 77 とか 777 のような8進数文字
- 10進数から16進数への変換
数値から toString(16) を実行。返り値は 1FF とか 3FF みたいな16進数文字列
「10進数を他の基数に変換したい」、という場面は少ないものの toString を使えばできることだけ知っておけばどこかで役立ちそうです。
以上JavaScriptで10進数を2・8・16進数に変換する方法についてでした。
補足 : 2・8・16進数から10進数への変換も可
toStringメソッドとは逆にある方法を使うと
- 2進数 ⇒ 10進数
- 8進数 ⇒ 10進数
- 16進数 ⇒ 10進数
のように変換することも可能です。
そのやり方とは次でまとめたようにparseIntメソッドを使うこと
上記事では使い方に加えてコード例についてもいくつか紹介したので、n進数 ⇒ 10進数 に変換が必要な場合は是非こちらもご覧ください。