關於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里面的數據轉換一定要明確進制和類型,其次是調用函數里面參數寫具體

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM