废话不多直接上代码
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];
}
}

本文展示了一个使用Qt Widget进行CRC校验的具体实现,包括了widget.cpp和widget.h文件的详细代码,以及crc.c和crc.h文件中CRC8、CRC16、CRC32的计算方法。代码中涉及了Qt界面的初始化、按钮点击事件处理,以及通过外部C函数调用进行CRC校验的过程。
最低0.47元/天 解锁文章
1464

被折叠的 条评论
为什么被折叠?



