-
-
Save rhyttr/6bba5569ad8a3aca660c41d5e18c6034 to your computer and use it in GitHub Desktop.
Hex dump in JavaScript (Node.js)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const fs = require('fs') | |
const filename = process.argv.slice(2)[0] | |
function hexdump(filename) { | |
let buffer = fs.readFileSync(filename) | |
let lines = [] | |
for (let i = 0; i < buffer.length; i += 16) { | |
let address = i.toString(16).padStart(8, '0') // address | |
let block = buffer.slice(i, i + 16) // cut buffer into blocks of 16 | |
let hexArray = [] | |
let asciiArray = [] | |
let padding = '' | |
for (let value of block) { | |
hexArray.push(value.toString(16).padStart(2, '0')) | |
asciiArray.push(value >= 0x20 && value < 0x7f ? String.fromCharCode(value) : '.') | |
} | |
// if block is less than 16 bytes, calculate remaining space | |
if (hexArray.length < 16) { | |
let space = 16 - hexArray.length | |
padding = ' '.repeat(space * 2 + space + (hexArray.length < 9 ? 1 : 0)) // calculate extra space if 8 or less | |
} | |
let hexString = | |
hexArray.length > 8 | |
? hexArray.slice(0, 8).join(' ') + ' ' + hexArray.slice(8).join(' ') | |
: hexArray.join(' ') | |
let asciiString = asciiArray.join('') | |
let line = `${address} ${hexString} ${padding}|${asciiString}|` | |
lines.push(line) | |
} | |
return lines.join('\n') | |
} | |
console.log(hexdump(filename)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment