QT实现串口的十六进制发送


void MainWindow ::on_pushBUtton_clicked () //发送数据
{
        QString strTXData;
        QByteArray hexdata;
       // strTXData = ui->lineEdit->text().toAscii();//txTextEdit
        strTXData = ui->txTextEdit->toPlainText().toAscii();
        if(ui->txHexcheckBox->isChecked()==true)
        {
            QByteArray temp;
                QString strHex;
            //count1=stringToHex(strTXData,hexdata);
            stringToHex(strTXData,hexdata);
            myCom->write(hexdata);
            temp =hexdata;
            QDataStream out(&temp,QIODevice::ReadWrite);//将字节数组读入
            while(!out.atEnd()) {
                qint8 outChar = 0;
                out >> outChar;//每字节填充一次,直到结束
                QString str = QString("%1").arg(outChar&0xFF, 2, 16, QLatin1Char('0'));//十六进制的转换
                count1++;
                strHex += str;
 
            }
            ui->TxlineEdit->setText(QString::number(count1));
        }
……………………………………………………
int MainWindow::stringToHex(QString str,QByteArray &senddata)
{
    int hexdata,lowhexdata;
        int hexdatalen = 0;
        int len = str.length();
        senddata.resize(len/2);//
        char lstr,hstr;
        str[len]=' ';
        for(int i=0; i<len; )
        {
            hstr=str[i].toAscii();
            //if(hstr == 0x0a)
             //   continue;
            i++;
            lstr=str[i].toAscii();
            if(lstr == ' ')
            {
                lstr=hstr;
                hstr='0';
                i++;
            }
            else
            {
                i++;
                if(str[i]!=' ')
                {
                }
                else
                {
                    i++;
                }
            }
            if(i >= len+2)
               break;
            hexdata = ConverToHexChar(hstr);
            lowhexdata = ConverToHexChar(lstr);
            if((hexdata == 16) || (lowhexdata == 16))
                break;
           else
               hexdata = hexdata*16+lowhexdata;
            senddata[hexdatalen] = (char)hexdata;
            hexdatalen++;
        }
        senddata.resize(hexdatalen);
        return hexdatalen;
}
char MainWindow::ConverToHexChar(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);
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值