目录

一、C语言实现模2-CRC算法

二、Python代码实现模2-CRC算法

三、使用PyQT制作上位机

3.1、制作UI

3.2、转化UI为Python代码

3.3、添加主函数并打包exe


一、C语言实现模2-CRC算法

模2-CRC算法模块函数的C语言代码如下,模2-CRC算法的实现原理可以参考另外一篇博客:模2CRC算法。

unsigned short int crc(unsigned char *data_add, unsigned char len_data)
{unsigned char i=0,len_word=0;unsigned short int word[100] = { 0x0000 };unsigned short int crc_value=0x0000;len_word = len_data / 2;for (i = 0; i < len_word; i++)                            {word[i]=(data_add[2*i]<<8)+(data_add[2*i+1]);//两个字节合成一个字word[i]=word[i]>> (i%16) | word[i]<< (16 - (i%16));//对数据字进行循环移位crc_value = crc_value ^ word[i];//求循环移位后的校验和字}crc_value = (crc_value << (len_word%16)) | (crc_value >> (16-(len_word%16)));//对上个结果进行反向循环移位return crc_value;
}

二、Python代码实现模2-CRC算法

# 输入字节长度最大100,输出为16位大小的crc_value
def crc16(data_add, len_data):word = [0] * 100            # python里面没有16位数据类型,定义为int型,数组大小为100crc_value = 0               # crc的初始值为int类型0len_word = len_data >> 1    # 字符串是半个字节,所以除以2for i in range(0, int(len_word)):str4 = data_add[(i * 4): (4 + i * 4)]  # 每次取4个字符串,上位机读进来的是字符串word[i] = int(str4,16)                  # 字符串转成10进制  如'0200'→ 512word[i] = (word[i] >> (i % 16) | (word [i] << (16 - (i % 16))) & 0xFFFF) # 循环移位,因为是int类型,左移之后要& 0xFFFF保证只取低16位crc_value = crc_value ^ word[i]     # 求循环移位后的校验和字crc_value = (((crc_value << (len_word % 16)) & 0xFFFF) | (crc_value >> (16-(len_word % 16)))) # 对上个结果进行反向循环移位return crc_value

C语言代码转换成Python代码如上,测试代码如下,输出结果正确,并且字符串之间的英文空格和逗号被去掉,所以对于上位机的输入操作比较友好,可以不用手动去除空格逗号等。

from crc import *test = '02  00,, 03003f800000000000000000'   # 02 00 03 00 3f 80 00 00 00 00 00 00 00 00 30 06
test = test.replace(" ", "")       # 去掉空格
test = test.replace(",", "")       # 去掉逗号
test_out = crc16(test, int(len(test)/2))  # int(len(test)/2是输入的字节数
print("%X" % test_out)             # %X是十六进制大写输出

三、使用PyQT制作上位机

3.1、制作UI

代码封装为crc.py,开始制作UI界面,打开QTDesigner,新建一个UI,命名为crc_ui.ui设计好UI界面。首先添加QWidget(默认名字为Form),,然后添加QLineEdit(命名为Input并去掉属性Read Only,另外一个命名为Output,保留Read only)、QLabel(添加作者信息、版本号等)、QPushButton(命名为CalcButton)等Object。

3.2、转化UI为Python代码

打开PyCharm→External Tools里面的PyUIC,将crc_ui.ui转化为crc_ui.py。其中External Tools如何添加QTDesigner和PyUIC可以参考博客设置添加External Tools。

3.3、添加主函数并打包exe

新建 main.py,添加如下代码,使用PyInstaller打包成一个单独的exe,命令:PyInstaller -F main.py -w。其中-F是打包成一个单独的exe,-w是去掉软件启动前的命令行串口,打包后的exe放到了工程目录的dist文件夹下,打开exe测试如图1。整个工程源码下载链接:源码下载。

import sys
from crc import *
from crc_ui import Ui_Form     # QWidget命名为Form所以导入的是Ui_Form,同下
from PyQt5.QtWidgets import QApplication, QMainWindowclass myForm(QMainWindow , Ui_Form):def __init__(self):super(myForm,self).__init__()self.setupUi(self)self.setWindowTitle("CRC计算器")   # 命名上位机名称self.CalcButton.clicked.connect(self.calc_crc)def calc_crc(self):Arr_Input = self.Input.text()  # 读取输入Arr_Input = Arr_Input.replace(" ", "")  # 去掉空格Arr_Input = Arr_Input.replace(",", "")  # 去掉逗号Arr_Input = Arr_Input.replace("'", "")  # 去掉'Arr_out_int = crc16(Arr_Input, int(len(Arr_Input) / 2))  # int(len(Arr_Input)/2是输入的有效字节数Arr_out_hex = '{:02X}'.format(Arr_out_int)    # 十进制转换成字符串self.Output.setText(Arr_out_hex)  # QLineEdit使用setText显示字符串 Text Browser使用insertPlainText显示if __name__=="__main__":app=QApplication(sys.argv)win=myForm()win.show()sys.exit(app.exec_())

Python实现CRC计算器相关推荐

  1. 怎么用python自制计算公式_手把手教你用python制作简易计算器,能够记录你使用的情况...

    话不多说,首先先看效果图,它能够记录你在使用过程中的历史,方便你查看是否有错: 接下来就仔细分析一下是如何制作的: 简易计算器 第一步:导入资源库 在过程中使用到了tkinter这个资源库,win+R ...

  2. python整数加法计算器_Python应用实例赏析2.1简单计算

    在日常应用中,我们会经常使用计算器进行计算,有些时候普通计算器的功能不能满足需要,例如使用计算机系统自带的计算器,计算不能超过32位数,手机自带计算器不能超过15位等(我的电脑和手机),也可能计算需要 ...

  3. python 实现 CRC 冗余码的方法

    python 实现 CRC 冗余码的方法 我这里考虑输入是 torch.Tensor的一个 只包含0 ,1 元素的张量 对于输入是numpy或者0,1字符串的方法就更简单了,总之都先要将输入处理成为 ...

  4. 随想录(python编写的计算器和贪吃蛇游戏)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] python除了用来开发server.web之外,一般还可以用来开发客户端,特别是用来做一些de ...

  5. python编写程序、从键盘输入一个年份_通过计算当年 - 出生年份使用python创建年龄计算器...

    我已经查看了所有堆栈溢出,所以我真的需要帮助.我正在制定一个程序,通过询问他们的出生年份来计算一个人的年龄,验证他们的出生年份是正确的,如整数,而不是单词或任何其他无效类型的答案.然后减去当年的出生年 ...

  6. python课程设计计算器_Python设计实现的计算器功能完整实例

    本文实例讲述了Python设计实现的计算器功能.分享给大家供大家参考,具体如下: 通过利用PYTHON 设计处理计算器的功能如: 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/ ...

  7. chatgpt赋能python:Python圆柱体积计算器:简单、高效、快速解决计算难题

    Python圆柱体积计算器:简单.高效.快速解决计算难题 圆柱体积是一个在日常生活.工程学.数学等领域都十分普遍的概念,可以用来计算许多实际问题中的体积,比如容器的容量.建筑材料的用量等等.在本文中, ...

  8. Python制作简易计算器(GUI)---Tkinter

    Python制作简易计算器(GUI)---Tkinter Tkinter简介 Tkinter 与 PyQt5 的比较 Tkinter PyQt5 项目展示 导入模块 函数封装 1. 运算公式的拼接与展 ...

  9. python 写一个计算器_用 Python 写个计算器

    首页 专栏 python 文章详情 0 用 Python 写个计算器 Python小二 发布于 56 分钟前 我们常见的计算辅助工具有两种,一种是古人发明的算盘,另一种就是我们现代人发明的计算器,与算 ...

最新文章

  1. Webhint开源了一种代码检查工具
  2. python3 使用psutil 查看内存占用
  3. linux学习笔记 (fork FILE PC)
  4. 2018学校计算机 远程教学工作总结,2018年远程教育工作总结范文
  5. C++ 常用查找算法
  6. mysql-复习表的基本操作01
  7. 学而思编程python软件怎么样_学而思编程社区缺点详细分析
  8. Android消息推送(Android Push Notification)
  9. 戴尔Any Cloud 助力企业快速实现云转型
  10. 从来不是别人的不幸和痛苦
  11. React-native android App项目搭建
  12. 关于网站推广 网站营销 建议
  13. Json对象和string之间的转换
  14. 2011-12-21的告别信
  15. Huo-deng-M
  16. 70后程序男的成长经历
  17. 职工信息存入文件employee,再抽取部分信息存入另一个文件employee_type
  18. 在 RHEL or CentOS 7、8 中更改主机名的 4 种方法
  19. 离散实验偏序关系满足实验报告C语言,离散数学实验三
  20. 使用信号量机制解决生产者消费者问题

热门文章

  1. iSCSI存储系统知识详解
  2. 【JumpServer-初识篇】一键搭建JumpServer堡垒机、对接server服务器主机
  3. python 协程 gevent
  4. 终于摸透了iPhone闹钟用法,别放那里浪费了
  5. [CSS] css优先级顺序
  6. 股票交易系统接口设计
  7. TP-Link 不回应,安全工程师公开了其路由器漏洞
  8. 关于Java零基础的公众号_大学mooc零基础学Java语言答案公众号
  9. MockMvc 单元测试样例
  10. 乐乐音乐:Android音乐播放器及动感(KTV)歌词相关博客汇总