Skip to content

Instantly share code, notes, and snippets.

@JonathonReinhart
Forked from 7h3rAm/hexdump.py
Last active July 23, 2022 00:12
Show Gist options
  • Save JonathonReinhart/509f9a8094177d050daa84efcd4486cb to your computer and use it in GitHub Desktop.
Save JonathonReinhart/509f9a8094177d050daa84efcd4486cb to your computer and use it in GitHub Desktop.
hexdump implementation in Python
import string
def hexdump(src, length=16, sep='.'):
DISPLAY = string.digits + string.letters + string.punctuation
FILTER = ''.join(((x if x in DISPLAY else '.') for x in map(chr, range(256))))
lines = []
for c in xrange(0, len(src), length):
chars = src[c:c+length]
hex = ' '.join(["%02x" % ord(x) for x in chars])
if len(hex) > 24:
hex = "%s %s" % (hex[:24], hex[24:])
printable = ''.join(["%s" % FILTER[ord(x)] for x in chars])
lines.append("%08x: %-*s |%s|\n" % (c, length*3, hex, printable))
print ''.join(lines)
if __name__ == '__main__':
data = ''.join(chr(x) for x in range(256))
hexdump(data)
@JonathonReinhart
Copy link
Author

Updated from forked version:

  • Use the character classes from string instead of the len(repr(chr(x))) == 3 trick which didn't work for backslash. This is clearer now.
  • Just use FILTER when making the printable part; the ord(x) < 127 part was unnecessary, since FILTER contains 256 entries.

@hash3liZer
Copy link

That's really a nice version of hexdump, since you can get it in the form of return and print it at once.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment