#!/usr/bin/python3 # ==================================================================== # hex dump # ==================================================================== import os READ_BYTE_CHUNK = 16 # -------------------------------------------------------------------- # ---- print a chunk of bytes in hex and ascii # -------------------------------------------------------------------- def print_chunk(idx,byts): ln = len(byts) print(f'{idx:08} ',end='') for i in range(READ_BYTE_CHUNK): if i < ln: byt = byts[i] print(f'{byt:02x} ',end='') else: print(' ',end='') for i in range(READ_BYTE_CHUNK): if i < ln: byt = byts[i] if byt < 32 or byt > 126: # un-printable byte/char bchr = '.' else: bchr = chr(byt) else: bchr = ' ' print(bchr,end='') print() # -------------------------------------------------------------------- # ---- print title # -------------------------------------------------------------------- def print_title(): title = '-offset- ' +\ '--------------------- hex ---------------------' +\ ' ---- ascii -----' print(title) # -------------------------------------------------------------------- # ---- main # -------------------------------------------------------------------- file_name = './faces/unknown_image.png' chunks_output = 0 idx = 0 print() print(f'file name: {file_name}') print() print_title() with open(file_name, mode='rb') as bfile: ## ---- start somewhere in the file - EOF-24 ##bfile.seek(-24,os.SEEK_END) while True: byts = bfile.read(READ_BYTE_CHUNK) if len(byts) == 0: break print_chunk(idx,byts) idx += READ_BYTE_CHUNK # ---- limit output for testing chunks_output += 1 if chunks_output > 3: break