16進数がからむあれこれの準備として、hex[0], ..., hex[15] を文字列 "0", "1", ... "F" で初期化するさまざまな方法(古い JavaScript でも使えるもの)。
いちばん強引なのは、hex[0] = "0", ... と全部ベタで書く。少しだけマシなのは:
for(i=0; i<=9; i++) { hex[i] = i + ""; } hex[10]="A", hex[11]="B", hex[12]="C", hex[13]="D", hex[14]="E", hex[15]="F";
—— どうみても汚い。タイプしていてイヤになる、いかにも面倒だ。こんなのでも一部の JavaScript 専門ページで「十進数を十六進数に変換するサンプルスクリプト」の一部として採用されてるようです。とりあえず動けばええやんという発想は嫌いじゃない。が、同じようなことを何度もタイプさせられると、もっとラクしたいよーと思うのがプログラマのさが。
たぶん、次の書き方がいちばん気が利いていてハッカーらしいだろうが、これが本当に最善かは別問題。
for(i=0; i<16; i++) { hex[i] = "0123456789ABCDEF".charAt(i); }
十進数 n を十六進数に変換するには、単に n.toString(16) で良い。サンプルスクリプトもへったくれもない組み込み関数そのものだ。これを使えば:
for(i=0; i<16; i++) { hex[i] = i.toString(16); }
ただしabcdefが大文字になるか小文字になるか保証がないので(どうも小文字になるっぽい)、どちらにするか明示するために、
(i.toString(16)).toUpperCase() または (i.toString(16)).toLowerCase()
としたほうが良いだろう。
この方法の欠点は、toString 関数がこういうふうに引数をとれるというあまり知られていない知識がないと使えないことだ。第二の方法は、だれでも知ってるようなことを組み合わせてちょっと意外なことをやってるので、第二のほうが(知識よりもひらめきに頼るという意味で)ハッカーらしい。けれど toString() の仕様を知っているなら、第三の方法のほうがエレガントだろう。