【PYTHON】HEX打印二进制数据示例

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

示例

在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值