(function () { var repeat = function (times, str) { var ret = ""; for (var i = 0; i < times; i++) { ret += str; } return ret; }; var printHex = function (width, num) { var ret = Number(num).toString(16); if (ret.length < width) { return repeat(width - ret.length, "0") + ret; } else { return ret; } }; var isPrintableAscii = function (code) { return (code >= 0x20 && code <= 0x7e); }; Rakka.hexDump = function (data, limit) { var offset = 0; var size = Math.min(data.length, limit); var ret = ""; for (; offset < size; offset += 16) { ret += printHex(8, offset); ret += " "; var begin = offset; var end = Math.min(offset + 16, size); for (var i = begin; i < end; i++) { var c = data.charCodeAt(i); ret += printHex(2, c); ret += " "; if (end - i == 9) { ret += " "; } } for (var i = end; i < offset + 16; i++) { ret += " "; if (end - i == 9) { ret += " "; } } ret += " |"; for (var i = begin; i < end; i++) { var c = data.charCodeAt(i); if (isPrintableAscii(c)) { ret += data.charAt(i); } else { ret += "."; } } ret += "|"; for (var i = end; i < offset + 16; i++) { ret += " "; } ret += "\n"; } if (data.length > limit) { ret += printHex(8, offset); ret += " ...\n"; } return ret; }; })();