字符串与16进制转化

来源:互联网 发布:php 文章管理系统 编辑:程序博客网 时间:2024/06/05 15:12

  鄙人在学习QT软件编写上位机的过程中,电表的地址为6个16进制的字节,需要用上位机进行操作更改。


 16进制转 字符串的代码如下:


  QString str;
          for(int i =0;i<6;i++)
           {
               str += QString("%1").arg(stru.protocol.dlt645.addr[i], 2, 16, QChar('0'));
           }
  其中,addr[i]  为从下位机读到的地址,2代表宽度,16代表16进制数据,

QString QString::arg(inta,intfieldWidth = 0,intbase = 10,QCharfillChar = QLatin1Char( ' ' )) const

If fillChar is '0' (the number 0, ASCII 48), the locale's zero is used. For negative numbers, zero padding might appear before the minus sign.


字符串转16进制如下:

因为上位机输入的是地址连续的字符串,没有任何断点(split)不能用,只能用mid  来实现,获得每两个字节,然后再转到16进制数据通过串口输出。 mid的字节从0开始数(代表1)。

 QString str = ui->tableWidget->item(iRow,4)->text();
  QString addr0,addr1,addr2,addr3,addr4,addr5;

            addr0 = str.mid(0,2);
            addr1 = str.mid(2,2);
            addr2 = str.mid(4,2);
            addr3 = str.mid(6,2);
            addr4 = str.mid(8,2);
            addr5 = str.mid(10,2);
            stru.protocol.dlt645.addr[0]=addr0.toInt(0,16);
            stru.protocol.dlt645.addr[1]=addr1.toInt(0,16);
            stru.protocol.dlt645.addr[2]=addr2.toInt(0,16);
            stru.protocol.dlt645.addr[3]=addr3.toInt(0,16);
            stru.protocol.dlt645.addr[4]=addr4.toInt(0,16);
            stru.protocol.dlt645.addr[5]=addr5.toInt(0,16);

为保证每次更改地址时,每次输入的地址必须为12位,做了一个比较Low警告处理,如下:


  if(str.size() == 12)
         {
            QString addr0,addr1,addr2,addr3,addr4,addr5;
            addr0 = str.mid(0,2);
            addr1 = str.mid(2,2);
            addr2 = str.mid(4,2);
            addr3 = str.mid(6,2);
            addr4 = str.mid(8,2);
            addr5 = str.mid(10,2);
            stru.protocol.dlt645.addr[0]=addr0.toInt(0,16);
            stru.protocol.dlt645.addr[1]=addr1.toInt(0,16);
            stru.protocol.dlt645.addr[2]=addr2.toInt(0,16);
            stru.protocol.dlt645.addr[3]=addr3.toInt(0,16);
            stru.protocol.dlt645.addr[4]=addr4.toInt(0,16);
            stru.protocol.dlt645.addr[5]=addr5.toInt(0,16);
         }
         else
         {
             QMessageBox::warning(this,tr("警告"),tr("电表的地址为12位!请正确输入"));
                     return;
         }

这样只要输入的超过12位或不足12位,都需要重新设置地址。

原创粉丝点击