- ベストアンサー
16進n桁の文字列変換の方法は?
手持ちの本『JavaScriptポケットリファレンス』によると『toString(16)』で 整数値を16進数の文字列へ変換できるようです。 そこで質問します。 整数値『123』を16進数の4桁『007B』に変換する方法を教えて下さい。 『Number(123).toString(16).toUpperCase()』とすると『7B』ですので、 先頭に『00』を追加したいのです。どうすれば良いでしょうか? あと、10進n桁の方法も同じように出来ると思いますが、その方法も一緒に教えて下さい。 以上。お願いします。→JavaScript 歴1.5ヵ月です。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> もし、出来ないのならば『無理』または、似たような制御文字列があるのならば教えて下さい。 > 続きの質問として、お願いします。 無理です。 ただ、こういうのが欲しいという人はいるようで探してみるとライブラリなどが見つかったりします。 http://www.onicos.com/staff/iz/amuse/javascript/expert/ 「JavaScript sprintf」辺りで検索すると他にも出てくると思います。
その他の回答 (1)
- suzuki-_-
- ベストアンサー率77% (152/195)
<script type="text/javascript"> <!-- var str = "000" + Number(123).toString(16);//最低1桁を考え頭に0を3個付ける str = str.substr(str.length-4);//strの長さから-4=下4桁にする document.write(str); // おまけ 戻す document.write(Number("0x" + str));//16進数は0xで始まる数値なのでNumberで囲んで0xを頭に --> </script> 10進数の場合も数値が動的ならば桁数n-1分だけ0を頭につけてsubstrでやればどうにでもできると思いますよ
お礼
ご回答ありがとうございます。 どうやら変換された文字列に『00』という文字列を自分で追加すればいいんですね。 私は、C言語出身のため JavaScript で『%04X』という感じで簡単に出来るのかと思って 今回質問してみました。→書式指定などで簡単には出来ないんですよね?ちょっと疑問? あと『substr』の第2引数は省略してもいいのですね。ふ~ん。そうなんだ! まだ試していませんが省略可能なんですね。 suzuki-_- さんのを参考に次のようにしてみました。 <script type="text/javascript"> <!-- function NumberOutput(num){ var dec, hex; hex = "000" + Number(num).toString(16).toUpperCase(); hex = hex.substr(hex.length - 4); dec = "000" + Number(num).toString(10); dec = dec.substr(dec.length - 4); document.write( "<P>&#",dec,";<BR>(0x",hex,")</P>" ); } --> </script> 以上です。とても参考になりました。 あと最後に、C言語の『printf』関数の書式制御文字列のように『%04X』などは指定できないんすよね? もし、出来ないのならば『無理』または、似たような制御文字列があるのならば教えて下さい。 続きの質問として、お願いします。
お礼
ご回答ありがとうございます。 JavaScript では『無理』なのですね。→すっきりしました。 googleで『JavaScript sprintf』で検索するといっぱい出てきますね。 どうも、自分で作れば実現できるようですね。 私も昔、C言語ですが標準である『sprintf』から整数部のみを扱うコンパクト版を 自作したことがありました。この自作した『text_sprintf』には『%b』、『%e』、 『%w』という書式制御文字列を追加して拡張していました。 『%b』⇒2進表記 『%e』⇒ESC 文字コード 『%w』⇒1ワード出力('あ') 以上です。 これから『JavaScript』専用の自作『sprintf』などを作る予定です。 リンク情報と検索キーワード情報がとても参考になりました。 anekos さん、本当に有り難うございました。 これで質問を締め切ります。