我是靠谱客的博主 会撒娇纸鹤,最近开发中收集的这篇文章主要介绍使用QT制作CRC校验工具,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

废话不多直接上代码

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_OBJECT


public:
    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;
            else
                crc = 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__

界面截图

源码链接:https://download.csdn.net/download/dailin2012/87686166?spm=1001.2014.3001.5503

最后

以上就是会撒娇纸鹤为你收集整理的使用QT制作CRC校验工具的全部内容,希望文章能够帮你解决使用QT制作CRC校验工具所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部