69 lines
1.2 KiB
JavaScript
69 lines
1.2 KiB
JavaScript
'use strict';
|
|
|
|
function hexdump(ab, offset, len, opts) {
|
|
if (!opts) {
|
|
opts = {};
|
|
}
|
|
var ui8 = new Uint8Array(ab.buffer || ab, offset || ab.byteOffset, len || ab.byteLength);
|
|
var bytecount = 0;
|
|
var head = ' 0 1 2 3 4 5 6 7 8 9 A B C D E F';
|
|
var trail;
|
|
var str = [].slice
|
|
.call(ui8)
|
|
.map(function(i) {
|
|
var h = i.toString(16);
|
|
if (h.length < 2) {
|
|
h = '0' + h;
|
|
}
|
|
return h;
|
|
})
|
|
.join('')
|
|
.match(/.{1,2}/g)
|
|
.join(' ')
|
|
.match(/.{1,48}/g)
|
|
.map(function(str) {
|
|
var lead = bytecount.toString(16);
|
|
bytecount += 16;
|
|
|
|
while (lead.length < 7) {
|
|
lead = '0' + lead;
|
|
}
|
|
|
|
while (str.length < 48) {
|
|
str += ' ';
|
|
}
|
|
|
|
if (opts.C) {
|
|
return (
|
|
lead +
|
|
' ' +
|
|
str +
|
|
' |' +
|
|
str
|
|
.replace(/ /g, '')
|
|
.match(/.{1,2}/g)
|
|
.map(function(ch) {
|
|
var c = String.fromCharCode(parseInt(ch, 16));
|
|
if (!/[ -~]/.test(c)) {
|
|
c = '.';
|
|
}
|
|
return c;
|
|
})
|
|
.join('') +
|
|
'|'
|
|
);
|
|
} else {
|
|
return lead + ' ' + str;
|
|
}
|
|
})
|
|
.join('\n');
|
|
|
|
trail = (len || ab.byteLength).toString(16);
|
|
while (trail.length < 7) {
|
|
trail = '0' + trail;
|
|
}
|
|
return head + '\n' + str + '\n' + trail;
|
|
}
|
|
|
|
module.exports = hexdump;
|