python hexdump实现 open一个bin文件 并显示之

# -*- coding:utf-8 -*-
#!/usr/bin/env python3

import os, sys, string, shutil, re 
import base64
import struct
import codecs
import ctypes
import zlib
import requests
import urllib

from time import sleep
from urllib.parse import unquote



def hexdump1(src, length=16):
    result = []
    print("result = ", result) 
    digits = 4 if isinstance(src, str) else 2
    print("digits = ", digits) 
    
    for i in range(0, len(src), length):
        s = src[i:i + length]
        hexa = ' '.join([hex(x)[2:].upper().zfill(digits) for x in s])
        text = ''.join([chr(x) if 0x20 <= x < 0x7F else '.' for x in s])
        result.append("{0:04X}".format(i) + ' '*3 + hexa.ljust(length * (digits + 1)) + ' '*3 + '|' + "{0}".format(text))
    print('|\n'.join(result))      


def hexdump(src, length=16):
     result = []
     # 判读输入是否为字符串
     digits = 4 if isinstance(src, str) else 2
     #print("digits = ", digits)      
     for i in range(0, len(src), length):
         # 将字符串切片为16个为一组
         s = src[i:i + length]
         #print("length = ", length) 
         #print("s = ", s) 
         #print("i = ", i)
         
         #用16进制来输出, x是值,digits表示输出宽度(匹配*)
         hexa = ' '.join(["%0*X" % (digits, (x)) for x in s])
         #print("hexa = ", hexa)
         
         hexb = ' '.join(["%02X" % (x) for x in s])
         #print("hexb = ", hexb)
         
          
         # 用来输出原值
         text = ''.join([chr(x) if 0x20 <= x < 0x7F else '.' for x in s])
         #print("text = ", text, "\n""\n""\n")
         
         # %-*s, 星号是length*(digits + 1)的值 
         result.append("%04X    %-*s   |%s|" % (i, length * (digits + 1), hexa, text,))
         
         
         
     print(' \n'.join(result))


if __name__ == "__main__":
   path = "123.bin";
   fd = open(path, 'rb');
   bin_data = fd.read();
   fd.close();
   hexdump(bin_data);
   


             

   

你可能感兴趣的:(python,开发语言,前端)