[Javascript] 数値データの進数変換

2016年9月30日

Javascript テクノロジー プログラミング 学習

javascriptでバイナリ操作を行う時に2進数や16進数を扱ったり、相互に変換する必要があるので、javascriptで操作できるようにしてみた。

まずはググる

Google

javascript 進数変換

検索結果

2進数・16進数・10進数-JavaScript入門 parseInt() - JavaScript | MDN - Mozilla Developer Network ビット演算子 - JavaScript | MDN JavaScriptプログラミング講座【数値について(Number)】 JavaScript で n 進数を扱う: Days on the Moon 親切書いていただいているサイトが沢山ヒットしました。

10進数を他の進数に変換

どうやら「parseInt」と「toString」を組み合わせる事で進数変換ができる事がわかった。 ルールは下記の通りだ
1. parseIntで元進数を定義 2. toStringで変換後進数を指定
var num = 12345; //2進数 var decimal2 = parseInt(num,10).toString(2); //8進数 var decimal8 = parseInt(num,10).toString(8); //16進数 var decimal16= parseInt(num,10).toString(8); //結果 console.log(decimal2 , decimal8 , decimal16); > 11000000111001 30071 30071 簡単なのだが、何故かparseIntを使わないと10進数でNGが出るのが何故か今のところ理解出来ていないが、とりあえずお作法として覚えておこう。 console.log("12345".toString(2)); > "12345" console.log(12345.toString(2)); > Uncaught SyntaxError: Invalid or unexpected token parseIntを使うことで進数を確定するというような意味なのかもしれないね。

2進数,8進数,16進数→10進数

var dec2 = parseInt("1101" , 2); console.log(dec2); >13 var dec8 = parseInt("11" , 8); console.log(dec8); >9 var dec16 = parseInt("aa" , 16); console.log(dec16); >170 10進数に変換するのは、parseIntの役割だったんですね。 なれていないとtoStringを使っちゃいそうでなんだかヤヤこいよ。

ヤヤこくしないために関数作ってみる

面倒くさがり屋の下駄としては、こういう場合は関数を使って以後ネイティブ関数とはおさらばするという手段を取りたい。

概要

decimal.convertという関数を作り、元値、元進数、変換後進数を指定することで値を返せばいい。 ただし、指定が間違っている場合はエラーを返すようにしなければならない。 エラー対象としては、元進数と元値が間違っている場合だ。 例えば、3という数字を2進数と指定するとエラーという事。

ソース

(function(){ var $$={}; /** * Decimal - convert * @param : num / 元数値 / ex) "0101" * @param : dec1 / 元数値の進数 / ex) 2 * @param : dec2 / 変換後の進数 * @return : dec2 - num */ $$.decimal = function( num , dec1 , dec2 ){ var num = num.toString(); var dec1 = Number(dec1); var dec2 = Number(dec2); var ret = parseInt(num , dec1).toString(dec2); //16進数の時に英字を大文字にする if(dec2 === 16){ret = ret.toUpperCase();} return ret; }; __LIB = $$; })();

実行サンプル

1. 10進数の”111”を16進数に変換する。 ※16進数の英字は大文字に変換しています。 2. 2進数の"0111"を10進数に変換 <script type="text/javascript"> console.log(__LIB.decimal("0111",10,16)); console.log(__LIB.decimal("0101",2,16)); </script> > 6F > 5

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。