欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python基于Tkinter编写crc校验工具

程序员文章站 2022-05-07 10:11:29
本篇文章,完全是用来记录代码用的,目的是使用python,基于tkinter编写crc校验工具。# -*- coding: utf-8 -*-import tkinterimport tkfiledi...

本篇文章,完全是用来记录代码用的,目的是使用python,基于tkinter编写crc校验工具。

# -*- coding: utf-8 -*-
import tkinter
import tkfiledialog
width = 16
topbit = (1 << (width - 1))
crctable = {}
class findlocation(object):
  def __init__(self):
    #创建主窗口,用于容纳其它组件
    self.root = tkinter.tk()
    #给主窗口设置标题内容
    self.root.title("获取bin文件的crc校验码")
    #创建一个输入框,并设置尺寸
    self.default_value = tkinter.stringvar()
    self.default_value.set('请输入bin文件全路径')
    self.ip_input = tkinter.entry(self.root,width=30,textvariable = self.default_value)
    #创建一个回显列表
    self.display_info = tkinter.listbox(self.root,width=50)
    #创建一个搜索文件的按钮
    self.getpath_button = tkinter.button(self.root,command = self.getpath,text = "获取文件")
    #创建一个查询结果的按钮
    self.result_button = tkinter.button(self.root,command = self.crcfast,text = "获取校验码")
  def gui_arrang(self):
    self.ip_input.pack()
    self.display_info.pack()
    self.getpath_button.pack()
    self.result_button.pack()
  def getpath(self):
    self.fname = tkfiledialog.askopenfilename()
    self.default_value.set(self.fname)
  def crcinit(self):
    shift = width - 8
    for step in range(0,256):
      remainder = step << shift
      for bit in range(8,0,-1):
        if remainder & topbit:
          remainder = ((remainder << 1) & 0xffff) ^0x1021
        else:
          remainder = remainder <<1
      crctable[step]=remainder
      #print("%x"%remainder)
  def crc16(self,ccrc,szdata,rlen):
    for len in range(rlen):
      data = (ccrc >> 8) ^ ord(szdata[len])
      ccrc = crctable[data] ^ (ccrc << 8) & 0xffff
    return ccrc
  def crcfast(self):
    filepath = self.ip_input.get()
    tlen = 0
    rlen = 0
    szdata = 0
    ccrc = 0
    self.crcinit()
    fp = open(filepath,'rb')
    fp.seek(0,2)
    ifilelen = fp.tell()
    fp.seek(0,0)
    while true:
      if (ifilelen - tlen) < 8192:
        rlen = ifilelen - tlen
      else:
        rlen = 8192
      szdata = fp.read(rlen)
      ccrc = self.crc16(ccrc,szdata,rlen)
      tlen += rlen
      if tlen >= ifilelen:
        break
    print "crc is %x\n" % ccrc
    fp.close()
    self.display_info.insert(0,"%x"%ccrc)
    self.display_info.insert(0,"this bin crc is :")  
def main():
  #初始化对象
  fl = findlocation()
  #进行布局
  fl.gui_arrang()
  #主程序执行
  tkinter.mainloop()
if __name__ == '__main__':
  main()

出差必备

买火车票、高铁票、机票,订酒店都打9折的出行工具trip,点击注册

到此这篇关于python基于tkinter编写crc校验工具的文章就介绍到这了,更多相关python实现crc校验内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!