HEX打印内存源码
import os
import sys
import struct
import time
MAX_BOUNDARY = 60
def print_hex_line(addr, byte16):
print(hex(addr).replace("0x", "").zfill(8).upper(), end=": ")
for k in byte16:
print(hex(k).replace("0x", "").zfill(2).upper(), end=" ")
if 0:
print(" | ", end="")
for k in byte16:
print(chr(k), end=" ")
print("")
return
def print_hex_header():
header = ["address :"]
tail = list([hex(k).replace("0x", "").zfill(2) for k in range(16)])
header.extend(tail)
print(" ".join(header).upper())
def set_bin_data(bindata, offset = 0, startbyte_orig = 0):
print_hex_header()
group_bytes = 16
lendata = len(bindata)
lengrp = lendata//group_bytes
lengrp = min([lengrp, 16])
for k in range(lengrp):
startbyte = (k*group_bytes + startbyte_orig)
endbyte = (k+1)*group_bytes + startbyte_orig
print_hex_line(offset+startbyte, bindata[startbyte:endbyte])
print("-"*MAX_BOUNDARY)
print("-"*MAX_BOUNDARY)
return startbyte, endbyte
def get_startbyte_list(bindata):
group_bytes = 16
lendata = len(bindata)
lengrp = lendata//group_bytes//group_bytes
return [k*group_bytes*group_bytes for k in range(lengrp)]
def begin_print_bin_hex(filebin):
with open(filebin, "rb") as binfile:
bindata = binfile.read()
if 0:
for k in range(len(bindata)//4):
print(struct.unpack(">I", bindata[k*4:(k*4+4)]))
startbyte_list = get_startbyte_list(bindata)
startid = 0
startbyte, endbyte = set_bin_data(bindata, 0x66660000, startbyte_list[startid])
tmp = 0
while True:
try:
print(">>> 请输入打印节点:", end="")
tmp += 1
startid = int(tmp % 6)
startid = max([min([startid, len(startbyte_list)-1]),0])
print("\t choose print: ", startid)
startbyte, endbyte = set_bin_data(bindata, 0x66660000, startbyte_list[startid])
time.sleep(2)
except Exception as e:
print(e)
pass
示例