#! /usr/bin/python3 # =================================================================== # my version of the unix hd command (hd datafile.txt) # ------------------------------------------------------------------- # Note: there is nothing special about this program. i did # it bacause i wanted to. in fact it has less functionallity # than "hd". # =================================================================== import sys # ------------------------------------------------------------------- # ---- hexdump a sequence of bytes # ---- # ---- Base on code from: # ---- www.geoffreybrown.com/blog/a-hexdump-program-in-python/ # ------------------------------------------------------------------- def hexdump(baddr,bdata): # hex string s1 = " ".join([f"{i:02x}" for i in bdata]) # insert extraspace between groups of 8 hex values s1 = s1[0:23] + " " + s1[23:] # ascii string s2 = "".join([chr(i) if 32 <= i <= 127 else "." for i in bdata]) print(f"{baddr * 16:08x} {s1:<48} |{s2}|") # ------------------------------------------------------------------- # ---- hexdump a file, 16 bytes at a time # ------------------------------------------------------------------- def hexdump_file(filepath): baddr = 0 with open(filepath,"rb") as f: for bdata in iter(lambda: f.read(16), b''): hexdump(baddr,bdata) baddr += 16 # ------------------------------------------------------------------- # ---- get the file path from the command line # ------------------------------------------------------------------- def get_file_path(): l = len(sys.argv) if l != 2: print() print(f'illegal number of arguments on command line ({l})') print() sys.exit() return sys.argv[1] # ------------------------------------------------------------------- # ---- main # ------------------------------------------------------------------- if __name__ == '__main__': fp = get_file_path() hexdump_file(fp)