python 二进制修改器

分页管理,避免一次性输出卡死



# from hexEditor import *

# -*- coding: utf-8 -*-

################################################################################
## Form generated from reading UI file 'hexEditor.ui'
##
## Created by: Qt User Interface Compiler version 5.15.2
##
## WARNING! All changes made in this file will be lost when recompiling UI file!
################################################################################

from PySide2.QtCore import *
from PySide2.QtGui import *
from PySide2.QtWidgets import *


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        if not MainWindow.objectName():
            MainWindow.setObjectName(u"MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QWidget(MainWindow)
        self.centralwidget.setObjectName(u"centralwidget")
        self.pushButton_f_byte = QPushButton(self.centralwidget)
        self.pushButton_f_byte.setObjectName(u"pushButton_f_byte")
        self.pushButton_f_byte.setGeometry(QRect(610, 30, 81, 31))
        self.spinBox_hexpage = QSpinBox(self.centralwidget)
        self.spinBox_hexpage.setObjectName(u"spinBox_hexpage")
        self.spinBox_hexpage.setGeometry(QRect(430, 30, 71, 31))
        self.pushButton_f_update = QPushButton(self.centralwidget)
        self.pushButton_f_update.setObjectName(u"pushButton_f_update")
        self.pushButton_f_update.setGeometry(QRect(520, 30, 81, 31))
        self.plainTextEdit = QPlainTextEdit(self.centralwidget)
        self.plainTextEdit.setObjectName(u"plainTextEdit")
        self.plainTextEdit.setGeometry(QRect(10, 70, 781, 481))
        self.pushButton_hexsave = QPushButton(self.centralwidget)
        self.pushButton_hexsave.setObjectName(u"pushButton_hexsave")
        self.pushButton_hexsave.setGeometry(QRect(700, 30, 81, 31))
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QMenuBar(MainWindow)
        self.menubar.setObjectName(u"menubar")
        self.menubar.setGeometry(QRect(0, 0, 800, 23))
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QStatusBar(MainWindow)
        self.statusbar.setObjectName(u"statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)

        QMetaObject.connectSlotsByName(MainWindow)
    # setupUi

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"MainWindow", None))
        self.pushButton_f_byte.setText(QCoreApplication.translate("MainWindow", u"\u6253\u5f00", None))
        self.pushButton_f_update.setText(QCoreApplication.translate("MainWindow", u"\u5237\u65b0", None))
        self.pushButton_hexsave.setText(QCoreApplication.translate("MainWindow", u"\u4fdd\u5b58", None))
    # retranslateUi



import sys
import re
import os
import PySide2
if 1:
    dirname = os.path.dirname(PySide2.__file__)
    plugin_path = os.path.join(dirname, 'plugins', 'platforms')
    os.environ['QT_QPA_PLATFORM_PLUGIN_PATH'] = plugin_path

class MainWinUi(QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        super(MainWinUi, self).__init__(parent)  # 调用父类的初始化
        self.setupUi(self)
        self.pushButton_f_byte.clicked.connect(lambda: self.filebyte(reload=False))
        self.spinBox_hexpage.valueChanged.connect(self.hexpagechange)
        self.pushButton_hexsave.clicked.connect(self.hexsave)
    if 1:
        def splitlis(self,lis,n):
            for i in range(0, len(lis), n):
                yield lis[i: i + n]
        def filebyte(self, reload=False):
            if reload == False or self.byteviewsrc == "":
                src = QFileDialog.getOpenFileName()[0]
                self.byteviewsrc = src
            self.hexcnt=open(self.byteviewsrc, 'rb').read().hex()
            self.hexinterval=22
            self.hexpagecnt=1024
            self.hexlis=self.splitlis(self.hexcnt,self.hexpagecnt*2)
            self.hexlis=list(self.hexlis)
            self.spinBox_hexpage.setMaximum(0 if len(self.hexlis)==0 else len(self.hexlis)-1)
            self.hexinx=int(self.spinBox_hexpage.text())
            self.nowtext=self.hexlis[self.hexinx]
            self.plainTextEdit.clear()
            self.plainTextEdit.insertPlainText(self.nowtext)
        def hexpagechange(self):
            self.hexlis[self.hexinx]=re.sub('[^0-9a-f]', '', self.plainTextEdit.toPlainText())
            self.hexinx = int(self.spinBox_hexpage.text())
            self.nowtext=self.hexlis[self.hexinx]
            self.plainTextEdit.clear()
            self.plainTextEdit.insertPlainText(self.nowtext)
        def hexsave(self):
            self.hexlis[self.hexinx]=re.sub('[^0-9a-f]', '', self.plainTextEdit.toPlainText())
            self.hexinx = int(self.spinBox_hexpage.text())
            self.nowtext=self.hexlis[self.hexinx]
            dst=QFileDialog.getSaveFileName()[0]
            fp=open(dst,'wb+')
            cnt=''
            for x in self.hexlis: cnt+=x
            fp.write(bytes.fromhex(cnt))
            fp.close()

if __name__ == '__main__':
    app = QApplication()
    ui = MainWinUi()
    ui.show()
    sys.exit(app.exec_())


在这里插入图片描述

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值