# -*- 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);