您的位置:首页 > 编程语言 > Qt开发

QT串口程序已16进制接受和发送数据

2017-03-24 23:03 337 查看
以16进制接受数据:

[cpp] view
plain copy

//读取串口缓冲区的所有数据给临时变量temp  

    QByteArray temp = MyCom->readAll();  

     

    QDataStream out(&temp,QIODevice::ReadWrite);    //将字节数组读入  

      

    while(!out.atEnd())  

    {  

        qint8 outChar = 0;  

        out>>outChar;   //每字节填充一次,直到结束  

        //十六进制的转换  

        QString str = QString("%1").arg(outChar&0xFF,2,16,QLatin1Char('0'));  

        ui->textBrowser->insertPlainText(str);  

    }  

      

    ui->textBrowser->insertPlainText("\n");  

以16进制发送数据:

[cpp] view
plain copy

    QString str = ui->lineEdit->text();//从LineEdit得到字符串  

  

    QByteArray senddata;  

  

    StringToHex(str,senddata);//将str字符串转换为16进制的形式  

  

    MyCom->write(senddata);//发送到串口  

  

void Widget::StringToHex(QString str, QByteArray &senddata)  

{  

    int hexdata,lowhexdata;  

    int hexdatalen = 0;  

    int len = str.length();  

    senddata.resize(len/2);  

    char lstr,hstr;  

    for(int i=0; i<len; )  

    {  

        //char lstr,  

        hstr=str[i].toAscii();  

        if(hstr == ' ')  

        {  

            i++;  

            continue;  

        }  

        i++;  

        if(i >= len)  

            break;  

        lstr = str[i].toAscii();  

        hexdata = ConvertHexChar(hstr);  

        lowhexdata = ConvertHexChar(lstr);  

        if((hexdata == 16) || (lowhexdata == 16))  

            break;  

        else  

            hexdata = hexdata*16+lowhexdata;  

        i++;  

        senddata[hexdatalen] = (char)hexdata;  

        hexdatalen++;  

    }  

    senddata.resize(hexdatalen);  

}  

  

char Widget::ConvertHexChar(char ch)  

{  

    if((ch >= '0') && (ch <= '9'))  

            return ch-0x30;  

        else if((ch >= 'A') && (ch <= 'F'))  

            return ch-'A'+10;  

        else if((ch >= 'a') && (ch <= 'f'))  

            return ch-'a'+10;  

        else return (-1);  

}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息