废话不多直接上代码

widget.cpp文件

#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
extern "C" {
#include "crc.h"
}
Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);Widget::initWindows();
}Widget::~Widget()
{delete ui;
}void Widget::initWindows()
{setWindowTitle("crc software");
}void Widget::on_clear_creat_data_button_clicked()
{ui->creat_data_textEdit->clear();
}void Widget::on_clear_get_data_button_clicked()
{ui->get_data_textEdit->clear();
}void Widget::on_get_data_button_clicked()
{//QString get_data = ui->get_data_text->text();//char buff[4096] ={0};//QByteArray ba = ui->get_data_text->text();//memcpy(buff, ba.toStdString().c_str(),  ba.toStdString().length());/*  char buff[4096] ={0};char* ptr;QString getdata = ui->get_data_textEdit->toPlainText();QByteArray ba;ba = getdata.toLatin1();ptr = ba.data();memcpy(buff, ptr, ba.length());ui->creat_data_textEdit->append(QString("获取数据长度: %1").arg(ba.length()));ui->creat_data_textEdit->append(buff);*//*  QString inputData = ui->get_data_textEdit->toPlainText();if(inputData.isEmpty()) return;auto data = QByteArray::fromHex(inputData.toLocal8Bit());*//*uint8_t buff[] ={0x55, 0x66, 0x00, 0x02, 0x00, 0x01, 0x00, 0x3A, 0x11, 0x22};uint16_t checksum = CRC16_cal(buff, sizeof(buff), 0);ui->creat_data_textEdit->append(QString("校验值: %1").arg(uint8_t((checksum&0xff)), 0, 16) + QString(" %1").arg(uint8_t((checksum&0xff00) >> 8), 0, 16));
*/QString getData = ui->get_data_textEdit->toPlainText();if(getData.isEmpty())return;/* if(getData.endsWith(" ")){QString handledata = getData.section(" ", 1, 1);ui->creat_data_textEdit->append(handledata);}*/QStringList getdatalist=getData.split(" ");//将数据以空格拆分,并放入数组中//qDebug()<<getdatalist.length();ui->creat_data_textEdit->append(QString("获取数据长度: %1").arg(getdatalist.length()));uint8_t buff[4096] ={0};uint16_t buff16[4096] ={0};int bufflen = 0;for(int i = 0; i < getdatalist.length(); i++){if(getdatalist.at(i) == " "){ui->creat_data_textEdit->append("数据空格过多");return;}QString getdata = getdatalist.at(i);if(getdata.length() > 2){qDebug()<<getdata.length();ui->creat_data_textEdit->append("数据错误");return;}buff[bufflen] = getdata.toInt(0, 16);buff16[bufflen] = getdata.toInt(0, 16);if(buff16[bufflen++] > 0xff){ui->creat_data_textEdit->append(QString("数据错误,数据是: 0x%1").arg(buff16[bufflen - 1], 0, 16));return;}/*if(getdata > 0xff){ui->creat_data_textEdit->append("数据错误");return;}else*/{qDebug()<<buff[bufflen - 1];}}uint16_t checksum = CRC16_cal(buff, bufflen, 0);// ui->creat_data_textEdit->append(QString("校验值: %1").arg(uint8_t((checksum&0xff)), 0, 16) + QString(" %1").arg(uint8_t((checksum&0xff00) >> 8), 0, 16));QString outstrdata = "数据:";for(int i = 0; i < bufflen; i++){outstrdata += QString().sprintf("%02x ", buff[i]);}outstrdata += QString("%1 ").arg(uint8_t((checksum&0xff)), 2, 16);outstrdata += QString("%1 ").arg(uint8_t((checksum&0xff00) >> 8), 2, 16);ui->creat_data_textEdit->append(outstrdata);}

widget.h文件

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>namespace Ui {
class Widget;
}class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();private slots:void initWindows();void on_clear_creat_data_button_clicked();void on_clear_get_data_button_clicked();void on_get_data_button_clicked();private:Ui::Widget *ui;
};#endif // WIDGET_H

crc.c文件

#include "crc.h"/*
crc 计算都遵循MSB First 的规则
CRC8:31
CRC-16:1021*/const uint8_t crc8_tab[256];
const uint16_t crc16_tab[256];
const uint32_t crc32_tab[256];/***********************************************************
CRC8 Coding & Decoding G(X) = x^8+x^5+x^4+x^0 (31)
***********************************************************/
uint8_t CRC8_cal(uint8_t *ptr, uint32_t len, uint16_t crc_init)
{uint8_t  crc;crc = crc_init;while (len--!=0){crc=crc8_tab[*ptr^crc];ptr++;}return(crc);
}/***********************************************************
CRC16 Coding & Decoding G(X) = X^16+X^12+X^5+1
***********************************************************/
uint16_t CRC16_cal(uint8_t *ptr, uint32_t len, uint16_t crc_init)
{uint16_t crc,   oldcrc16;uint8_t  temp;crc = crc_init;while (len--!=0){temp=(crc>>8)&0xff;oldcrc16=crc16_tab[*ptr^temp];crc=(crc<<8)^oldcrc16;ptr++;}//crc=~crc;      //??return(crc);
}/***********************************************************
CRC32 Coding & Decoding G(X) = X^32+X^26+X^23+X^22+X^16+X^12+X^11+X^10+X^8+X^7+X^5+X^4+X^2+X+1
***********************************************************/
uint32_t CRC32_cal(uint8_t *ptr, uint32_t len, uint16_t crc_init)
{uint32_t crc,oldcrc32;uint8_t  temp;crc = crc_init;while (len--!=0){temp=(crc>>24)&0xff;oldcrc32=crc32_tab[*ptr^temp];crc=(crc<<8)^oldcrc32;ptr++;}return(crc);
}/** Notes  这个不需要crc16tab*/
uint16_t cal_crc16_none_table(unsigned char *ptr, int32_t count, uint16_t crc_init)
{int crc;char i;crc = crc_init;while (--count >= 0){crc = crc ^ (int) *ptr++ << 8;i = 8;do{if (crc & 0x8000)crc = crc << 1 ^ 0x1021;elsecrc = crc << 1;}while(--i);}return (crc&0xFFFF);
}const uint8_t crc8_tab[256]=
{0, 94, 188, 226, 97, 63, 221, 131, 194, 156, 126, 32, 163, 253, 31, 65,157, 195, 33, 127, 252, 162, 64, 30, 95, 1, 227, 189, 62, 96, 130, 220,35, 125, 159, 193, 66, 28, 254, 160, 225, 191, 93, 3, 128, 222, 60, 98,190, 224, 2, 92, 223, 129, 99, 61, 124, 34, 192, 158, 29, 67, 161, 255,70, 24, 250, 164, 39, 121, 155, 197, 132, 218, 56, 102, 229, 187, 89, 7,219, 133, 103, 57, 186, 228, 6, 88, 25, 71, 165, 251, 120, 38, 196, 154,101, 59, 217, 135, 4, 90, 184, 230, 167, 249, 27, 69, 198, 152, 122, 36,248, 166, 68, 26, 153, 199, 37, 123, 58, 100, 134, 216, 91, 5, 231, 185,140, 210, 48, 110, 237, 179, 81, 15, 78, 16, 242, 172, 47, 113, 147, 205,17, 79, 173, 243, 112, 46, 204, 146, 211, 141, 111, 49, 178, 236, 14, 80,175, 241, 19, 77, 206, 144, 114, 44, 109, 51, 209, 143, 12, 82, 176, 238,50, 108, 142, 208, 83, 13, 239, 177, 240, 174, 76, 18, 145, 207, 45, 115,202, 148, 118, 40, 171, 245, 23, 73, 8, 86, 180, 234, 105, 55, 213, 139,87, 9, 235, 181, 54, 104, 138, 212, 149, 203, 41, 119, 244, 170, 72, 22,233, 183, 85, 11, 136, 214, 52, 106, 43, 117, 151, 201, 74, 20, 246, 168,116, 42, 200, 150, 21, 75, 169, 247, 182, 232, 10, 84, 215, 137, 107, 53
};const uint16_t crc16_tab[256]= {0x0,0x1021,0x2042,0x3063,0x4084,0x50a5,0x60c6,0x70e7,0x8108,0x9129,0xa14a,0xb16b,0xc18c,0xd1ad,0xe1ce,0xf1ef,0x1231,0x210,0x3273,0x2252,0x52b5,0x4294,0x72f7,0x62d6,0x9339,0x8318,0xb37b,0xa35a,0xd3bd,0xc39c,0xf3ff,0xe3de,0x2462,0x3443,0x420,0x1401,0x64e6,0x74c7,0x44a4,0x5485,0xa56a,0xb54b,0x8528,0x9509,0xe5ee,0xf5cf,0xc5ac,0xd58d,0x3653,0x2672,0x1611,0x630,0x76d7,0x66f6,0x5695,0x46b4,0xb75b,0xa77a,0x9719,0x8738,0xf7df,0xe7fe,0xd79d,0xc7bc,0x48c4,0x58e5,0x6886,0x78a7,0x840,0x1861,0x2802,0x3823,0xc9cc,0xd9ed,0xe98e,0xf9af,0x8948,0x9969,0xa90a,0xb92b,0x5af5,0x4ad4,0x7ab7,0x6a96,0x1a71,0xa50,0x3a33,0x2a12,0xdbfd,0xcbdc,0xfbbf,0xeb9e,0x9b79,0x8b58,0xbb3b,0xab1a,0x6ca6,0x7c87,0x4ce4,0x5cc5,0x2c22,0x3c03,0xc60,0x1c41,0xedae,0xfd8f,0xcdec,0xddcd,0xad2a,0xbd0b,0x8d68,0x9d49,0x7e97,0x6eb6,0x5ed5,0x4ef4,0x3e13,0x2e32,0x1e51,0xe70,0xff9f,0xefbe,0xdfdd,0xcffc,0xbf1b,0xaf3a,0x9f59,0x8f78,0x9188,0x81a9,0xb1ca,0xa1eb,0xd10c,0xc12d,0xf14e,0xe16f,0x1080,0xa1,0x30c2,0x20e3,0x5004,0x4025,0x7046,0x6067,0x83b9,0x9398,0xa3fb,0xb3da,0xc33d,0xd31c,0xe37f,0xf35e,0x2b1,0x1290,0x22f3,0x32d2,0x4235,0x5214,0x6277,0x7256,0xb5ea,0xa5cb,0x95a8,0x8589,0xf56e,0xe54f,0xd52c,0xc50d,0x34e2,0x24c3,0x14a0,0x481,0x7466,0x6447,0x5424,0x4405,0xa7db,0xb7fa,0x8799,0x97b8,0xe75f,0xf77e,0xc71d,0xd73c,0x26d3,0x36f2,0x691,0x16b0,0x6657,0x7676,0x4615,0x5634,0xd94c,0xc96d,0xf90e,0xe92f,0x99c8,0x89e9,0xb98a,0xa9ab,0x5844,0x4865,0x7806,0x6827,0x18c0,0x8e1,0x3882,0x28a3,0xcb7d,0xdb5c,0xeb3f,0xfb1e,0x8bf9,0x9bd8,0xabbb,0xbb9a,0x4a75,0x5a54,0x6a37,0x7a16,0xaf1,0x1ad0,0x2ab3,0x3a92,0xfd2e,0xed0f,0xdd6c,0xcd4d,0xbdaa,0xad8b,0x9de8,0x8dc9,0x7c26,0x6c07,0x5c64,0x4c45,0x3ca2,0x2c83,0x1ce0,0xcc1,0xef1f,0xff3e,0xcf5d,0xdf7c,0xaf9b,0xbfba,0x8fd9,0x9ff8,0x6e17,0x7e36,0x4e55,0x5e74,0x2e93,0x3eb2,0xed1,0x1ef0};const uint32_t crc32_tab[256]= {0x0,0x4c11db7,0x9823b6e,0xd4326d9,0x130476dc,0x17c56b6b,0x1a864db2,0x1e475005,0x2608edb8,0x22c9f00f,0x2f8ad6d6,0x2b4bcb61,0x350c9b64,0x31cd86d3,0x3c8ea00a,0x384fbdbd,0x4c11db70,0x48d0c6c7,0x4593e01e,0x4152fda9,0x5f15adac,0x5bd4b01b,0x569796c2,0x52568b75,0x6a1936c8,0x6ed82b7f,0x639b0da6,0x675a1011,0x791d4014,0x7ddc5da3,0x709f7b7a,0x745e66cd,0x9823b6e0,0x9ce2ab57,0x91a18d8e,0x95609039,0x8b27c03c,0x8fe6dd8b,0x82a5fb52,0x8664e6e5,0xbe2b5b58,0xbaea46ef,0xb7a96036,0xb3687d81,0xad2f2d84,0xa9ee3033,0xa4ad16ea,0xa06c0b5d,0xd4326d90,0xd0f37027,0xddb056fe,0xd9714b49,0xc7361b4c,0xc3f706fb,0xceb42022,0xca753d95,0xf23a8028,0xf6fb9d9f,0xfbb8bb46,0xff79a6f1,0xe13ef6f4,0xe5ffeb43,0xe8bccd9a,0xec7dd02d,0x34867077,0x30476dc0,0x3d044b19,0x39c556ae,0x278206ab,0x23431b1c,0x2e003dc5,0x2ac12072,0x128e9dcf,0x164f8078,0x1b0ca6a1,0x1fcdbb16,0x18aeb13,0x54bf6a4,0x808d07d,0xcc9cdca,0x7897ab07,0x7c56b6b0,0x71159069,0x75d48dde,0x6b93dddb,0x6f52c06c,0x6211e6b5,0x66d0fb02,0x5e9f46bf,0x5a5e5b08,0x571d7dd1,0x53dc6066,0x4d9b3063,0x495a2dd4,0x44190b0d,0x40d816ba,0xaca5c697,0xa864db20,0xa527fdf9,0xa1e6e04e,0xbfa1b04b,0xbb60adfc,0xb6238b25,0xb2e29692,0x8aad2b2f,0x8e6c3698,0x832f1041,0x87ee0df6,0x99a95df3,0x9d684044,0x902b669d,0x94ea7b2a,0xe0b41de7,0xe4750050,0xe9362689,0xedf73b3e,0xf3b06b3b,0xf771768c,0xfa325055,0xfef34de2,0xc6bcf05f,0xc27dede8,0xcf3ecb31,0xcbffd686,0xd5b88683,0xd1799b34,0xdc3abded,0xd8fba05a,0x690ce0ee,0x6dcdfd59,0x608edb80,0x644fc637,0x7a089632,0x7ec98b85,0x738aad5c,0x774bb0eb,0x4f040d56,0x4bc510e1,0x46863638,0x42472b8f,0x5c007b8a,0x58c1663d,0x558240e4,0x51435d53,0x251d3b9e,0x21dc2629,0x2c9f00f0,0x285e1d47,0x36194d42,0x32d850f5,0x3f9b762c,0x3b5a6b9b,0x315d626,0x7d4cb91,0xa97ed48,0xe56f0ff,0x1011a0fa,0x14d0bd4d,0x19939b94,0x1d528623,0xf12f560e,0xf5ee4bb9,0xf8ad6d60,0xfc6c70d7,0xe22b20d2,0xe6ea3d65,0xeba91bbc,0xef68060b,0xd727bbb6,0xd3e6a601,0xdea580d8,0xda649d6f,0xc423cd6a,0xc0e2d0dd,0xcda1f604,0xc960ebb3,0xbd3e8d7e,0xb9ff90c9,0xb4bcb610,0xb07daba7,0xae3afba2,0xaafbe615,0xa7b8c0cc,0xa379dd7b,0x9b3660c6,0x9ff77d71,0x92b45ba8,0x9675461f,0x8832161a,0x8cf30bad,0x81b02d74,0x857130c3,0x5d8a9099,0x594b8d2e,0x5408abf7,0x50c9b640,0x4e8ee645,0x4a4ffbf2,0x470cdd2b,0x43cdc09c,0x7b827d21,0x7f436096,0x7200464f,0x76c15bf8,0x68860bfd,0x6c47164a,0x61043093,0x65c52d24,0x119b4be9,0x155a565e,0x18197087,0x1cd86d30,0x29f3d35,0x65e2082,0xb1d065b,0xfdc1bec,0x3793a651,0x3352bbe6,0x3e119d3f,0x3ad08088,0x2497d08d,0x2056cd3a,0x2d15ebe3,0x29d4f654,0xc5a92679,0xc1683bce,0xcc2b1d17,0xc8ea00a0,0xd6ad50a5,0xd26c4d12,0xdf2f6bcb,0xdbee767c,0xe3a1cbc1,0xe760d676,0xea23f0af,0xeee2ed18,0xf0a5bd1d,0xf464a0aa,0xf9278673,0xfde69bc4,0x89b8fd09,0x8d79e0be,0x803ac667,0x84fbdbd0,0x9abc8bd5,0x9e7d9662,0x933eb0bb,0x97ffad0c,0xafb010b1,0xab710d06,0xa6322bdf,0xa2f33668,0xbcb4666d,0xb8757bda,0xb5365d03,0xb1f740b4};

crc.h文件

#ifndef __CRC_H__
#define __CRC_H__
#include <stdint.h>uint8_t     CRC8_cal    (uint8_t *ptr, uint32_t len, uint16_t crc_init);
uint16_t    CRC16_cal   (uint8_t *ptr, uint32_t len, uint16_t crc_init);
uint32_t    CRC32_cal   (uint8_t *ptr, uint32_t len, uint16_t crc_init);
uint16_t cal_crc16_none_table(unsigned char *ptr, int32_t count, uint16_t crc_init);#endif //__CRC_H__

界面截图

使用QT制作CRC校验工具相关推荐

  1. CRC校验工具 校验码自动生成软件支持十几种CRC计算方式

    CRC校验工具 校验码自动生成软件支持十几种CRC计算方式,包括MODBUS协议的CRC-16校验,CRC4.CRC5.CRC6.CRC7.CRC8.CRC16等21种算法,见图示.id=620738 ...

  2. 使用QT制作桌面小工具(一)

    制作目标: 实现一个桌面工具 制作内容: 1.显示图片 2.为窗口添加 ico 图标 3.隐藏窗口边窗 4.窗口置顶 5.实现拖拽操作 6.实现系统托盘.托盘菜单 开发环境 QT:5.14.1 MSV ...

  3. java modbus crc_modbus crc计算工具(Modbus CRC校验工具)

    CRC-16(循环冗余错误校验) 冗余循环码(CRC)包含2个字节,即16位二进制.CRC码由发送设备计算,放置于发送信息的尾部.接收信息的设备再重新计算接收到信息的CRC码,比较计算得到的CRC码是 ...

  4. CRC校验码简介及CRC16的计算方法

    [导读]什么是CRC校验?CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定.奇偶校验虽然简 ...

  5. 基于Qt5.15的CRC校验小工具开发项目

    基于Qt5.15的CRC校验小工具开发项目 前言 一.开发准备 二.开发流程 1.Qt配置与界面设置 2.控件基本配置 3.CRC算法介绍 4.信号与槽的四个响应事件 5.打包发布 总结 前言 近期用 ...

  6. 非常实用FPGA实现CRC校验介绍和代码生成工具

    目录 一.CRC原理. 二.CRC算法. 1.比特型算法. 2.字节型算法.(好理解也好用,实际中采用这种) 三.CRC参数模型 四.常用工具(重点来了) 1.CRC calculation  非常棒 ...

  7. QT开发一款MD5校验工具

    这是一款基于QT开发的MD5校验工具,在这你可以学习到界面UI的设计方法,以及QT应对字符串的处理方法.以及如何去使用QT进行多线程的开发. 实现后的程序运行截图: MD5.pro工程文件 #---- ...

  8. QT5制作MD5加密校验工具

    QT5制作MD5加密校验工具 QString path = QFileDialog::getOpenFileName(this,tr("请选择文件"),"D:/" ...

  9. CRC在线校验工具计算器

    CRC在线校验工具计算器 http://www.metools.info/code/c15.html

最新文章

  1. 德国波恩大学于鹏组根系与微生物互惠方向招收博士研究生
  2. prefetch 和preload_前端preload, prefetch,dns-prefetch,defer,async了解一下
  3. RDF -- 资源描述框架
  4. Memcached存储机制
  5. java语言提供结构_java学习之语句结构
  6. linux svn强制注释,svn强制提交时添加注释
  7. ubuntu 14.04 samba 的 配置
  8. MySQL修改存储过程
  9. oracle over函数 去重,oracle over结合row_number分区进行数据去重处理
  10. 华为天才少年1万元自制机械臂:能给葡萄缝针!
  11. 设计模式C++学习笔记之二(Proxy代理模式)
  12. 如何使用 iCloud 钥匙串从 macOS Monterey 导入和导出密码?
  13. 将I1111改成I1112
  14. 基于P2P终结者的ARP欺骗攻击实验
  15. php 生成不重复的会员卡号,php生成一个不重复的会员号
  16. java获取上个月15号_java获取当前上一周、上一月、上一年的时间
  17. Java程序员工资为什么越来越高?
  18. My blog has been migrated to GitHub.
  19. 目标检测(十一)——DSSD
  20. UNetbootin for Linux制作u盘安装盘

热门文章

  1. python爬取qq好友_利用Python爬取QQ好友空间数据
  2. sip客户端源码c语言,SIP客户端选型
  3. 云知识 - OMA-DM 和OTA的关系
  4. Runas命令:能让域用户/普通User用户以管理员身份运行指定程序
  5. mac 教程 安装cocoapod(100%成功)试过无数次
  6. 内网环境发送统计数据到企业微信
  7. Ang 表单 注册新用户
  8. 腾讯音乐MOO音乐应用的Flutter内存治理实战分享
  9. (中篇)中高级前端大厂面试秘籍,寒冬中为您保驾护航,直通大厂
  10. 微软下载历史windows版本软件