hexdump.js/hexdump.js

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;