首页 > Python资料 博客日记
基于Python设计的CRC-16 校验码计算器
2024-06-29 06:00:03Python资料围观159次
文章基于Python设计的CRC-16 校验码计算器分享给大家,欢迎收藏Python资料网,专注分享技术知识
基于Python设计的CRC-16 校验码计算器,CRC16离线计算器。
缘由:某日在做测试时,发现某位网友的CRC计算器无法正常使用了,哇,怎么回事?经过排查,感情他那工具是需要调用网络接口的,实际是个网页在线CRC计算器。不巧的是本人电脑刚搬迁过来,网络未通,网线还没有,遂,自己动手搓一个。于是诞生了这个。
本人不保证该作品没有bug,也没有经过严谨的测试验证,在任何情况下,无论因何种原因,本人均不承担因使用本程序或者代码所造成的任何直接、间接、特别、附带或间接损失的赔偿责任。
一、使用说明
- 双击 “
CRC16_Calculator.exe
” ,运行程序,会弹出程序窗口。 - 按照你的需求填写数据,点击计算即可显示结果。
- 程序界面如下:
仓库地址:Gitee
下载地址:发布
URL :https://gitee.com/zerone_space/crc16_calculator
下载: https://gitee.com/zerone_space/crc16_calculator/releases/tag/v1.0.1-beta
二、源码使用[only for programmer]
1、安装python
2、测试、运行
git clone https://gitee.com/zerone_space/crc16_calculator
cd crc16_calculator
python CRC16_Calculator.py
4、打包
4.1、安装虚拟环境
pip install pipenv
Tips:首次使用需要
pipenv
安装
4.2、进入虚拟环境
pipenv shell
4.3、在虚拟环境中安装 pyinstaller
打包工具
pip install pyinstaller -i https://pypi.doubanio.com/simple --trusted-host pypi.doubanio.com
Tips:每次重新打包都需要安装
4.4、在虚拟环境中使用pyinstaller
打包成可执行文件(.exe)
pyinstaller -F -w -i logo.ico ./src/CRC16_Calculator.py
4.5、完成打包,退出虚拟环境,再删除虚拟环境
exit
pipenv --rm
Tips:不删除虚拟环境也是可以的,这样下次重新打包,
则不需要重新安装pyinstaller
附录
from tkinter import *
from tkinter import messagebox
#font_str = "Times New Roman"
font_str = "阿里巴巴普惠体"
#font_str = "Source Han Sans CN"
# 按位(bit)反转,
def reverse(din,len_din):
din_bin=bin(din)
din_bin_str=str(din_bin)
dout_bin_str=''
for i in range(len_din):
if (i < len(din_bin_str)-2):
dout_bin_str = dout_bin_str + (din_bin_str[len(din_bin_str)-i-1])
else:
dout_bin_str = dout_bin_str + '0'
dout = int(dout_bin_str,2)
return dout
# 按Byte 反转,高位和低位交换位置
def exchange(din):
binstr = '{:016b}'.format(int(din,16))
inv_str = binstr[8:] + binstr[:8]
dout = int(inv_str,2)
return dout
class Application(Frame):
def __init__(self,master=None):
super().__init__(master)
self.master = master
self.pack()
self.CreatWidget()
# tkinter 组件创建UI界面
def CreatWidget(self):
self.label00 = Label(self,text='CRC-16 校验码离线计算器',font=(font_str, 12, "bold"))
self.label00.grid(row=0,column=1)
self.label01 = Label(self,text='数 据(Hex)',font=(font_str, 10))
self.label01.grid(row=1,column=0)
self.hexstr = StringVar()
self.entry01 = Entry(self,textvariable=self.hexstr,width=50,font=(font_str, 10))
self.entry01.grid(row=1,column=1)
self.hexstr.set('01 02 03') # 设置默认值
self.label04 = Label(self, text='多项式(Hex)',font=(font_str, 10))
self.label04.grid(row=2,column=0)
poly = StringVar()
self.entry04 = Entry(self,textvariable=poly,width=50,font=(font_str, 10))
self.entry04.grid(row=2,column=1)
poly.set('0x8005') # 设置默认值
self.label05 = Label(self, text='初始值(Hex)',font=(font_str, 10))
self.label05.grid(row=3,column=0)
init = StringVar()
self.entry05 = Entry(self,textvariable=init,width=50,font=(font_str, 10))
self.entry05.grid(row=3,column=1)
init.set('0xFFFF') # 设置默认值
# 创建布尔变量
self.refin = IntVar(value=1)
self.refout = IntVar(value=1)
self.highfirst = IntVar(value=1)
# 创建复选按钮组件
self.CheckB1 = Checkbutton(self, text="输入反转", variable=self.refin,font=(font_str, 10))
self.CheckB1.grid(row=4,column=0) # pack()
self.CheckB2 = Checkbutton(self, text="输出反转", variable=self.refout,font=(font_str, 10))
self.CheckB2.grid(row=4,column=1) # pack()
self.CheckB3 = Checkbutton(self, text="高位在左", variable=self.highfirst,font=(font_str, 10))
self.CheckB3.grid(row=4,column=2) # pack()
# 计算结果显示
self.result = StringVar()
self.result.set('0x0000')
self.label06 = Label(self, text='结 果(Hex)',font=(font_str, 10))
self.label06.grid(row=6,column=0)
self.result_label = Entry(self, textvariable=self.result,width=50,font=(font_str, 10))
self.result_label.grid(row=6, column=1)
self.resbin = StringVar()
self.resbin.set('0000000000000000')
self.label07 = Label(self, text='结 果 (Bin)',font=(font_str, 10))
self.label07.grid(row=7,column=0)
self.resbin_label = Entry(self, textvariable=self.resbin,width=50,font=(font_str, 10))
self.resbin_label.grid(row=7, column=1)
Button(self,text='计算',command=self.calculate,font=(font_str, 10)).grid(row=5,column=1)
# 计算过程,在‘计算’按钮按下时调用
def calculate(self):
self.textfmt()
hex_input = self.entry01.get()
refin = self.refin.get() #输入数据反转
refout = self.refout.get() #输出数据反转
crc16= int(self.entry05.get(),16)#0xffff #初始值
poly = int(self.entry04.get(),16)#0x8005 #多项式
highfirst = self.highfirst.get()#高位在左,地位在右
print('REFIN :'+str(refin))
print('REFOUT:'+str(refout))
print('INPUT :'+str(hex_input))
print('INIT :'+str(crc16))
print('POLY :'+str(poly))
poly = reverse(poly,16)
ls = hex_input.split()
datas=list(ls)
for data_str in datas:
data=int(data_str,16)
if (refin == 0):
data = reverse(data,8)
crc16 = data ^ crc16
for i in range(8):
if 1&(crc16) == 1:
crc16 = crc16 >> 1
crc16 = crc16^poly
else:
crc16 = crc16 >> 1
if (refout == 0):
result = hex(reverse(crc16,16))
else:
result = hex(crc16)
if highfirst == 0:
result = hex(exchange(result))
binstr = '{:016b}'.format(int(result,16))
self.resbin.set(str(binstr))
result = result[2:]
self.result.set('0x'+str(result).upper())
print('Hex_Res:' + '0x'+result.upper())
print('Bin_Res:' + binstr)
def textfmt(self):
plaintext = self.entry01.get()
print(plaintext)
import re
plaintext = re.sub(r'[^0-9a-fA-F]','',plaintext)
result = ' '.join(plaintext[i:i+2] for i in range(0, len(plaintext), 2))
self.hexstr.set(result)
if __name__ == '__main__':
root = Tk()
sw = root.winfo_screenwidth()
sh = root.winfo_screenheight()
w = 600
h = 220
x = (sw-w)/2
y = (sh-h)/2
root.geometry("%dx%d+%d+%d" %(w,h,x,y))
root.title('CRC-16 离线计算工具')
root.resizable(0,0)
#root.iconbitmap('../logo.ico')
Application(master=root)
root.mainloop()
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签:
相关文章
最新发布
- 【Python】selenium安装+Microsoft Edge驱动器下载配置流程
- Python 中自动打开网页并点击[自动化脚本],Selenium
- Anaconda基础使用
- 【Python】成功解决 TypeError: ‘<‘ not supported between instances of ‘str’ and ‘int’
- manim边学边做--三维的点和线
- CPython是最常用的Python解释器之一,也是Python官方实现。它是用C语言编写的,旨在提供一个高效且易于使用的Python解释器。
- Anaconda安装配置Jupyter(2024最新版)
- Python中读取Excel最快的几种方法!
- Python某城市美食商家爬虫数据可视化分析和推荐查询系统毕业设计论文开题报告
- 如何使用 Python 批量检测和转换 JSONL 文件编码为 UTF-8
点击排行
- 版本匹配指南:Numpy版本和Python版本的对应关系
- 版本匹配指南:PyTorch版本、torchvision 版本和Python版本的对应关系
- Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO
- 相关性分析——Pearson相关系数+热力图(附data和Python完整代码)
- Python与PyTorch的版本对应
- Anaconda版本和Python版本对应关系(持续更新...)
- Python pyinstaller打包exe最完整教程
- Windows上安装 Python 环境并配置环境变量 (超详细教程)