目录

一、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型,数组大小为100

crc_value = 0 # crc的初始值为int类型0

len_word = len_data >> 1 # 字符串是半个字节,所以除以2

for i in range(0, int(len_word)):

str4 = data_add[(i * 4): (4 + i * 4)] # 每次取4个字符串,上位机读进来的是字符串

word[i] = int(str4,16) # 字符串转成10进制 如'0200'→ 512

word[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, QMainWindow

class 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计算excel crc_CRC计算器的Python实现相关推荐

  1. python计算excel平均值_python计算excel平均值和标准差

    ############################################## ######## python计算excel平均值和标准差 ####### ############### ...

  2. python计算excel数据_python计算excel平均值和标准差

    ############################################## ######## python计算excel平均值和标准差 ####### ############### ...

  3. python与excel做数据可视化-Python的Excel操作及数据可视化

    Excel表操作 python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel,xlwt是写excel的库. 安装xlrd pip install xlrd 简单的表格读取 ...

  4. python处理excel表格教程-python操作excel(内附python教程分享)

    今天学习了下xlwings这个库,目的是为了让计算机自动化操作excel表,当某天需要做一些很繁琐的事情,就可以派上用场啦. 基本对象 网上刮来的图,很好. 大概就是xlwings中可以有多个exce ...

  5. python处理excel表格数据-利用Python处理和分析Excel表中数据实战.doc

    利用Python处理和分析Excel表中数据实战 [利用python进行数据分析--基础篇]利用Python处理和分析Excel表中数据实战 原创 2017年06月28日 15:09:32 标签: p ...

  6. python获取excel某一列-Python从Excel中读取日期一列的方法

    如下所示: import xlrd import datetime file=u"伏特加.xls"#注意读中文文件名稍微处理一下 data=xlrd.open_workbook(f ...

  7. python的excel数据分析_excel VS python 谁更适合数据分析?

    我常常会听到这样的问题,"金融分析中,为什么我要学习像python这样的编程语言,甚至使用它超过excel呢?" 在金融领域,python成为炙手可热的分析工具,这几乎已经成为共识 ...

  8. python在excel中的应用-python怎样在excel中应用?

    python在excel中应用的方法:首先[return sorted(s)]在本地建立一个目录,并保存这个代码并命名为[Methods.py]:然后打开Excel,填写一些数据以便提供python脚 ...

  9. python与excel做数据可视化-python操作Excel、读取CVS与数据可视化

    1. python操作Excel python操作Excel有多种module可以实现(xlrd.xlwt.xlutils.openpyxl.xlsxwriter),本文使用xlsxwriter这个m ...

最新文章

  1. 2021年大数据HBase(十一):Apache Phoenix的视图操作
  2. 观点 | 港科大张潼教授最新发言:对人工智能发展的一些思考
  3. shell 编程 判断语句参数
  4. 僵尸进程的产生与处理
  5. kali安装步骤失败 选择并安装软件_Pycharm2019.3.3软件安装步骤
  6. java不可编辑的文本框_如何使编辑文本不可编辑,但在JAVA中可点击
  7. CVE-2017-11882漏洞分析
  8. JavaScript ECMAScript规范里对于分号semicolon用法最权威的定义
  9. 生成下拉框的几种方法总结——数据来源:枚举
  10. 关于CSS的碎片学习
  11. DM8168 DMM(2)
  12. python 提示框如何顶层显示_python tkinter之顶层菜单、弹出菜单实例
  13. 双11秒查包裹,菜鸟携快递公司推出云客服功能
  14. 美国计算机专业研究生学制几年,美国硕士学制:美国硕士读几年毕业
  15. Java图形用户界面
  16. 【实战 01】心脏病二分类数据集
  17. 高盛vr/ar研究报告
  18. Java、JSP 基于微信小程序 宠物在线医疗管理系统的设计与实现
  19. python读文件-read_csv()-常用参数
  20. 此图片来自微信公众平台 未经允许不可引用

热门文章

  1. js移动端双指缩放和旋转
  2. centos7 redis集群搭建
  3. UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xcc in position 2: invalid continuation byte
  4. 神经网络一般训练多少次,神经网络训练时间太长
  5. 软盘结构 磁头号和起始扇区的计算方法
  6. eMMC的五种操作模式
  7. saltstack中grains详解
  8. 干货分享|纯CSS绘制电池充电水波纹动效(uni-app|view组件版)
  9. gtx1050双显卡 linux,ubuntu16.04+GTX1050-Ti+cuda8.0(解决桌面重复登录)
  10. 谷歌play无法安装内部分享软件-internal app sharing is turned off