Number.prototype.toHexString
数値(num)から4桁のゼロ埋めされた16進文字列が欲しい場合に
var num = 123; var rv = ("000" + num.toString(16)).slice(-4); alert( rv ); // "007b"
と毎回書くのもアレなので、こんな感じに書けるといいんじゃないでしょうか。
alert( (123).toHexString(4) ); // "007b"
実装してみました。
//{@prototype (function(_DEC2HEX) { // create HEX2 cache for (var i = 0x100; i < 0x200; ++i) { _DEC2HEX[i - 0x100] = i.toString(16).slice(-2); } Number.prototype.toHexString = function(n) { // @param Number(= 2): digits. 1 ~ 8 // @return String: HexDigitString // [1][omit arg] console.log( (1).toHexString() ) -> "01" // [2][n = 1] console.log( (1).toHexString(1) ) -> "1" // [3][n = 2] console.log( (255).toHexString(2) ) -> "ff" // [4][n = 8] console.log( (255).toHexString(8) ) -> "000000ff" // [5][Math.floor] console.log( (1.1).toHexString(2) ) -> "01" // [6][Math.abs] console.log( (-1).toHexString(2) ) -> "01" var val = (this < 0 ? -this : this) | 0, digit = (n === void 0 || n <= 0) ? 2 : n; if (digit === 2) { return _DEC2HEX[val & 0xff]; // use cached string } return ("0000000" + val.toString(16)).slice(-digit); }; })(Number.prototype._DEC2HEX = {}); //}@prototype
小数点以下を切り捨て、負の数値は正の数値として処理した16進数文字列を返します。
先頭に"0x"は付きません。toHexString(n) の n で指定された長さまでゼロフィルを行います。
結果の文字列の長さが n より長い場合は、下 n 桁の文字列を返します(上位の桁を切り落とします)。n は省略可能です。省略した場合は n = 2 を指定した場合と同じ結果になります。n に 1以下の値や無効な値を指定すると n = 2 と同じ結果になります。
n = 2 の場合に限り、予め作り貯めておいた Hash ( Number.prototype._DEC2HEX ) から文字列を検索し、わりと素早く結果を返す気がします。
あと、Number.prototype._DEC2HEX は他の処理からも使いまわす予定なので、Number.prototype にくっつけてます。
日本語の説明を読むよりも、コードを読んだほうが簡単ですね!
Number.prototype.toHexString - jsdo.it - share JavaScript, HTML5 and CSS