当前位置: 移动技术网 > IT编程>脚本编程>Python > Python基于Tkinter编写crc校验工具

Python基于Tkinter编写crc校验工具

2020年05月15日  | 移动技术网IT编程  | 我要评论

航讯网,you can you up,爱拍宝

本篇文章,完全是用来记录代码用的,目的是使用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校验内容请搜索移动技术网以前的文章或继续浏览下面的相关文章希望大家以后多多支持移动技术网!

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网