QT制作CRC校验工具源码

本文展示了一个使用Qt Widget进行CRC校验的具体实现,包括了widget.cpp和widget.h文件的详细代码,以及crc.c和crc.h文件中CRC8、CRC16、CRC32的计算方法。代码中涉及了Qt界面的初始化、按钮点击事件处理,以及通过外部C函数调用进行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];
          }
      }


    
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值