Qt中串口发送HEX数据

             在lineEdit输入数据的类型是QString类型,以往我在发送的时候是ASCII方式发送,这会儿突然遇到一个是十六进制发送/接受的下位机,就需要将QString 转化为十六进制,本来直接用toHex进行转化,但考虑到在输入的的时候有间隔符之类的,我就写了个转化的函数;

              以下是转化单个字符的函数:

char  MainWindow::convertHexFromChar(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);
    }
}
 将lineEdit中的数据挨个转化发送的完整程序如下,switch语句是我为了可以兼有可以发送ASCII设置的,看case 1部分即可; 
  

void MainWindow::on_transmitPushButton_clicked()
{
    char cDataHigh,cDataLow;
    QByteArray sendData;
    int iSendDataSize = 0;
    int iSize = ui->lineEdit->text().size();
    switch(ui->modeSelectComboBox->currentIndex())
    {
        case 1:
        {
            for(int i = 0;i1;)
            {
                char tempByte_h = ui->lineEdit->text().at(i).toAscii();
                if(tempByte_h == ' ')
                {
                    i+=1;
                    continue;
                }
                else
                {
                    char tempByte_l = ui->lineEdit->text().at(i+1).toAscii();//转化成ASCII码的形式,便于符号之间的运算
                    i+=2;
                    cDataHigh = MainWindow::convertHexFromChar(tempByte_h);
                    cDataLow  = MainWindow::convertHexFromChar(tempByte_l);
                    char sendChar =(char)((cDataHigh<<4)+cDataLow);
                    sendData[iSendDataSize]=sendChar;
                    iSendDataSize++;
                }
            }
            Com->write(sendData);//write是一个重载函数,参考QIODevice类
           
        }break;
        case 0:
        {
             //Com->write(ui->lineEdit->text().toAscii());
             Com->write((ui->lineEdit->text()+"\r").toAscii());
             qDebug()<<ui->lineEdit->text();
 
  
        }break;
        default:
        {
              Com->write(ui->lineEdit->text().toAscii());
        }break;
    }
}

你可能感兴趣的:(Qt中串口发送HEX数据)