python计算excel crc_CRC计算器的Python实现
目录
一、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实现相关推荐
- python计算excel平均值_python计算excel平均值和标准差
############################################## ######## python计算excel平均值和标准差 ####### ############### ...
- python计算excel数据_python计算excel平均值和标准差
############################################## ######## python计算excel平均值和标准差 ####### ############### ...
- python与excel做数据可视化-Python的Excel操作及数据可视化
Excel表操作 python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel,xlwt是写excel的库. 安装xlrd pip install xlrd 简单的表格读取 ...
- python处理excel表格教程-python操作excel(内附python教程分享)
今天学习了下xlwings这个库,目的是为了让计算机自动化操作excel表,当某天需要做一些很繁琐的事情,就可以派上用场啦. 基本对象 网上刮来的图,很好. 大概就是xlwings中可以有多个exce ...
- python处理excel表格数据-利用Python处理和分析Excel表中数据实战.doc
利用Python处理和分析Excel表中数据实战 [利用python进行数据分析--基础篇]利用Python处理和分析Excel表中数据实战 原创 2017年06月28日 15:09:32 标签: p ...
- python获取excel某一列-Python从Excel中读取日期一列的方法
如下所示: import xlrd import datetime file=u"伏特加.xls"#注意读中文文件名稍微处理一下 data=xlrd.open_workbook(f ...
- python的excel数据分析_excel VS python 谁更适合数据分析?
我常常会听到这样的问题,"金融分析中,为什么我要学习像python这样的编程语言,甚至使用它超过excel呢?" 在金融领域,python成为炙手可热的分析工具,这几乎已经成为共识 ...
- python在excel中的应用-python怎样在excel中应用?
python在excel中应用的方法:首先[return sorted(s)]在本地建立一个目录,并保存这个代码并命名为[Methods.py]:然后打开Excel,填写一些数据以便提供python脚 ...
- python与excel做数据可视化-python操作Excel、读取CVS与数据可视化
1. python操作Excel python操作Excel有多种module可以实现(xlrd.xlwt.xlutils.openpyxl.xlsxwriter),本文使用xlsxwriter这个m ...
最新文章
- 2021年大数据HBase(十一):Apache Phoenix的视图操作
- 观点 | 港科大张潼教授最新发言:对人工智能发展的一些思考
- shell 编程 判断语句参数
- 僵尸进程的产生与处理
- kali安装步骤失败 选择并安装软件_Pycharm2019.3.3软件安装步骤
- java不可编辑的文本框_如何使编辑文本不可编辑,但在JAVA中可点击
- CVE-2017-11882漏洞分析
- JavaScript ECMAScript规范里对于分号semicolon用法最权威的定义
- 生成下拉框的几种方法总结——数据来源:枚举
- 关于CSS的碎片学习
- DM8168 DMM(2)
- python 提示框如何顶层显示_python tkinter之顶层菜单、弹出菜单实例
- 双11秒查包裹,菜鸟携快递公司推出云客服功能
- 美国计算机专业研究生学制几年,美国硕士学制:美国硕士读几年毕业
- Java图形用户界面
- 【实战 01】心脏病二分类数据集
- 高盛vr/ar研究报告
- Java、JSP 基于微信小程序 宠物在线医疗管理系统的设计与实现
- python读文件-read_csv()-常用参数
- 此图片来自微信公众平台 未经允许不可引用
热门文章
- js移动端双指缩放和旋转
- centos7 redis集群搭建
- UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xcc in position 2: invalid continuation byte
- 神经网络一般训练多少次,神经网络训练时间太长
- 软盘结构 磁头号和起始扇区的计算方法
- eMMC的五种操作模式
- saltstack中grains详解
- 干货分享|纯CSS绘制电池充电水波纹动效(uni-app|view组件版)
- gtx1050双显卡 linux,ubuntu16.04+GTX1050-Ti+cuda8.0(解决桌面重复登录)
- 谷歌play无法安装内部分享软件-internal app sharing is turned off