QT接收到串口收到的十六进制数据判断问题

         这个项目是移植到开发板上的程序,以前在windows下通过串口收到的QByteArray数据通过temp[i] !=0xEB这种写法没有出过错误。由于在开发板上执行,串口没有通过QT自带的SerialPort类接收数据,并且无法打断点,所以只能对比打印来判断。

    QByteArray temp = QByteArray(s_data);//= myCom->readAll();
    if(temp[0] != 0xEB)
        qDebug()<<"erro1";
    if(temp[1] != 0x90)
        qDebug()<<"erro2";
    if(temp[2] != 0x0A)
        qDebug()<<"erro3";
    if(temp[size-1] != 0xAC)
        qDebug()<<"erro4";

 

     通过打印出的数据可以看到,程序在判断0xAC的时候出了问题。这说明类型应该是不存在问题的。但是由于代码功底不是很好,又按照网上的方法转换了好几次。

            qDebug()<<"get init";
            if(0x2F == ((unsigned char)temp[7]))
            {
                qDebug()<<"init 1";
                init_alldata();
            }
            if(temp.at(7) == 0x2F)
            {
                qDebug()<<"init 2";
            }
            if(s_data[7] == 0x2F)
            {
                qDebug()<<"init 3";                
            }
            if((int)s_data[7] == 0x2F)
            {
                qDebug()<<"init 4";                
            }

 

最后发现如果在开发板通过char*收到的数据转为QByteArray后会出现这种BUG。

 

Qt中,可以通过串口接收到的数据来显示十进制数据。具体实现方法如下: 1. 在Qt串口接收槽函数中,将接收到的数据转换为十进制数据。 ```c++ void MainWindow::readData() { QByteArray data = serial->readAll(); // 读取串口数据 QString hexStr = data.toHex(); // 将数据转换为十六进制字符串 int decNum = hexStr.toInt(nullptr, 16); // 将十六进制字符串转换为十进制数据 ui->textEdit->append(QString::number(decNum)); // 在文本编辑器中显示十进制数据 } ``` 2. 在Qt的界面中,添加一个文本编辑器用于显示十进制数据。 ```c++ // 在MainWindow.ui文件中添加一个TextEdit控件,并给其设置一个objectName为textEdit <widget class="QTextEdit" name="textEdit"> <property name="geometry"> <rect> <x>30</x> <y>30</y> <width>341</width> <height>241</height> </rect> </property> </widget> ``` 3. 在Qt的界面中,添加一个按钮用于清空文本编辑器中的内容。 ```c++ // 在MainWindow.ui文件中添加一个PushButton控件,并给其设置一个objectName为clearButton <widget class="QPushButton" name="clearButton"> <property name="geometry"> <rect> <x>30</x> <y>290</y> <width>341</width> <height>31</height> </rect> </property> <property name="text"> <string>清空</string> </property> </widget> ``` 4. 在Qt的槽函数中,实现清空文本编辑器中的内容的功能。 ```c++ void MainWindow::clearText() { ui->textEdit->clear(); // 清空文本编辑器中的内容 } ``` 需要注意的是,在将十六进制字符串转换为十进制数据时,需要使用toInt函数并指定基数为16。同时,如果转换失败,可以将第二个参数设置为nullptr,此时如果转换失败,函数会返回0。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值