• 关于QT内部16进制、十进制、QByteArray,QString


    QT里面的数据转化成十六进制比较麻烦,其他的int或者byte等型都有专门的函数,而十六进制没有特定的函数去转化,这我在具体的项目中已经解决(参考网上大神)->小项目程序

    QT里面虽然有什么QString str; str.toInt();等函数,但是用不好的话,会出很大的问题。

    QByteArray:这个东西可以存放很多数据,16进制的数据、字符串类的数据等。

     下面这个data接受的是16进制数据,现在想显示出来就得转化成QString,然后再转化成int类型用于计算

     1 QByteArray data=tcpSocket->readAll(); //接受16进制

     1 QString p = data.toHex(); 2 ui->clearLineEdit->setText(p); //转化成Qstring

     data.toInt(0,16) //转化成int

     注意:data.toInt(),直接使用不行!

    接下来是接受字符串的转化,

    1 QByteArray data=tcpSocket->readAll();  //接受的是字符串

    QString p = QString(data);   //直接转化就行了

    最后是十进制转化成十六进制的问题(主要用在串口和TCP上面),下面程序有几种表述:

        1.char p[3]={0x11,0xab,0x0b}; 把里面的数据转化成0x11ab0b发送! 

        2.int  p[3] = {170,170,170}; 把里面数据转化成0xaaaaaa发送!

    实现的功能都是一样的,第二种简单一点,下面以第二种为例,第一种类似!

    QString a1;
        for(int j=0;j<7;j++)
        {
            if(my_class->g_data[j]<16)
            a1+='0'+QString::number(my_class->g_data[j], 16).toUpper();//防止有0x0a,程序会转换成'a',我们要的是转换成'0a'
            else a1+=QString::number(my_class->g_data[j], 16).toUpper();
        }
    //将字符型进制转化为16进制
     97 QByteArray MainWindow::QString2Hex(QString str)
     98     {
     99         QByteArray senddata;
    100         int hexdata,lowhexdata;
    101         int hexdatalen = 0;
    102         int len = str.length();
    103         senddata.resize(len/2);
    104         char lstr,hstr;
    105         for(int i=0; i<len; )
    106         {
    107             hstr=str[i].toLatin1();   //字符型
    108             if(hstr == ' ')
    109             {
    110                 i++;
    111                 continue;
    112             }
    113             i++;
    114             if(i >= len)
    115                 break;
    116             lstr = str[i].toLatin1();
    117             hexdata = ConvertHexChar(hstr);
    118             lowhexdata = ConvertHexChar(lstr);
    119             if((hexdata == 16) || (lowhexdata == 16))
    120                 break;
    121             else
    122                 hexdata = hexdata*16+lowhexdata;
    123             i++;
    124             senddata[hexdatalen] = (char)hexdata;
    125             hexdatalen++;
    126         }
    127         senddata.resize(hexdatalen);
    128         return senddata;
    129     }
    130  //将1-9 a-f字符转化为对应的整数
    131 int MainWindow::ConvertHexChar(char ch)
    132     {
    133         if((ch >= '0') && (ch <= '9'))
    134          return ch-'0';
    135         else if((ch >= 'A') && (ch <= 'F'))
    136          return ch-'A'+10;
    137         else if((ch >= 'a') && (ch <= 'f'))
    138          return ch-'a'+10;
    139         else return (-1);
    140     }
     

     

    上面的程序就是先转换成16进制的QString,千万别写直接number()没有里面参数的转换!

    这是我写TCP发送程序的小小总结,网上哟很多这种资料,但是有很多不适合,总结一下,QT里面的数据转换一定要明确进制和类型,其次是调用函数里面参数写具体

     

  • 相关阅读:
    MSDN for 2010的那些麻烦事
    CPtrList操作--插入,删除特定元素,删除全部
    如何绕过ORA00701错误和降低bootstrap对象的高水位
    ORA00600:[1112]内部错误&ROW CACHE ENQUEUE LOCK一例
    CRS5008: Invalid attribute value
    ORA00600[kjpsod1]&ORA44203错误一例
    runInstaller ignoreInternalDriverError
    RMAN CURSOR_SHARING=EXACT脚本
    SQL调优:带函数的谓词导致CBO Cardinality计算误差
    11g Real Application Testing:Database Replay使用方法
  • 原文地址:https://www.cnblogs.com/wjy-lulu/p/6600703.html
Copyright © 2020-2023  润新知