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

以16进制接受数据:

[cpp]  view plain  copy
  1. //读取串口缓冲区的所有数据给临时变量temp  
  2.     QByteArray temp = MyCom->readAll();  
  3.      
  4.     QDataStream out(&temp,QIODevice::ReadWrite);    //将字节数组读入  
  5.       
  6.     while(!out.atEnd())  
  7.     {  
  8.         qint8 outChar = 0;  
  9.         out>>outChar;   //每字节填充一次,直到结束  
  10.         //十六进制的转换  
  11.         QString str = QString("%1").arg(outChar&0xFF,2,16,QLatin1Char('0'));  
  12.         ui->textBrowser->insertPlainText(str);  
  13.     }  
  14.       
  15.     ui->textBrowser->insertPlainText("\n");  
以16进制发送数据:

[cpp]  view plain  copy
  1.     QString str = ui->lineEdit->text();//从LineEdit得到字符串  
  2.   
  3.     QByteArray senddata;  
  4.   
  5.     StringToHex(str,senddata);//将str字符串转换为16进制的形式  
  6.   
  7.     MyCom->write(senddata);//发送到串口  
  8.   
  9. void Widget::StringToHex(QString str, QByteArray &senddata)  
  10. {  
  11.     int hexdata,lowhexdata;  
  12.     int hexdatalen = 0;  
  13.     int len = str.length();  
  14.     senddata.resize(len/2);  
  15.     char lstr,hstr;  
  16.     for(int i=0; i<len; )  
  17.     {  
  18.         //char lstr,  
  19.         hstr=str[i].toAscii();  
  20.         if(hstr == ' ')  
  21.         {  
  22.             i++;  
  23.             continue;  
  24.         }  
  25.         i++;  
  26.         if(i >= len)  
  27.             break;  
  28.         lstr = str[i].toAscii();  
  29.         hexdata = ConvertHexChar(hstr);  
  30.         lowhexdata = ConvertHexChar(lstr);  
  31.         if((hexdata == 16) || (lowhexdata == 16))  
  32.             break;  
  33.         else  
  34.             hexdata = hexdata*16+lowhexdata;  
  35.         i++;  
  36.         senddata[hexdatalen] = (char)hexdata;  
  37.         hexdatalen++;  
  38.     }  
  39.     senddata.resize(hexdatalen);  
  40. }  
  41.   
  42. char Widget::ConvertHexChar(char ch)  
  43. {  
  44.     if((ch >= '0') && (ch <= '9'))  
  45.             return ch-0x30;  
  46.         else if((ch >= 'A') && (ch <= 'F'))  
  47.             return ch-'A'+10;  
  48.         else if((ch >= 'a') && (ch <= 'f'))  
  49.             return ch-'a'+10;  
  50.         else return (-1);  
  51. }  
  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值