imasara2script
WSHやHTAなどのプログラムサンプルの公開用ブログ
2016年10月21日金曜日
基数変換
用途・目的
toStringメソッドを使うと36進数までは10進数から変換できます。
37以上を指定すると「引数が不正です」というエラーが出ます。
37以上でも使える基数変換用の関数を作成しました。
ソース
基数変換=function(値, 基数, arr置換用, sw10){ if(sw10){ // sw10がtrueの場合は37+進数から10進数へ変換して返す。 // この場合はarr置換用は必須。 var obj={}, 基数=arr置換用.length for(var i=0;i<基数;i++){ obj[arr置換用[i]] = i } var dec=0 for(var i=0,L=値.reverse().length;i<L;i++){ dec += Math.pow(基数, i) * obj[値[i]] } return dec } // sw10がfalseの場合は10進数を37+進数に変換して返す。 // arr置換用はなくてもOK。ある場合は基数はarr置換用.lengthで置き換える。 if(arr置換用){基数 = arr置換用.length} var arr=[], 桁単位=基数, 余り while(0<値){ arr.unshift( (余り = 値 % 桁単位) / (桁単位 / 基数) ) 桁単位 *= 基数 値 -= 余り } if(arr置換用){ for(var i=0,L=arr.length;i<L;i++){ arr[i] = arr置換用[arr[i]] } } return arr }
サンプル
基数変換=function(値, 基数, arr置換用, sw10){ if(sw10){ // sw10がtrueの場合は37+進数から10進数へ変換して返す。 // この場合はarr置換用は必須。 var obj={}, 基数=arr置換用.length for(var i=0;i<基数;i++){ obj[arr置換用[i]] = i } var dec=0 for(var i=0,L=値.reverse().length;i<L;i++){ dec += Math.pow(基数, i) * obj[値[i]] } return dec } // sw10がfalseの場合は10進数を37+進数に変換して返す。 // arr置換用はなくてもOK。ある場合は基数はarr置換用.lengthで置き換える。 if(arr置換用){基数 = arr置換用.length} var arr=[], 桁単位=基数, 余り while(0<値){ arr.unshift( (余り = 値 % 桁単位) / (桁単位 / 基数) ) 桁単位 *= 基数 値 -= 余り } if(arr置換用){ for(var i=0,L=arr.length;i<L;i++){ arr[i] = arr置換用[arr[i]] } } return arr } arr = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()=~|\\`@[{]}:*;+,<.>/?_ '.split('') 値 = 1200 変換後 = 基数変換(値,0,arr) confirm([ '変換前:'+値, '変換後(10進数→10進数):'+基数変換(値,10), 'arr.length:'+arr.length, '変換後(10進数→'+arr.length+'進数):'+変換後, '10進数に戻す:'+基数変換(変換後,0,arr,true) ].join('\n'))
動作テスト
0 件のコメント:
コメントを投稿
次の投稿
前の投稿
ホーム
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿