1. 程式人生 > >關於QT內部16進位制、十進位制、QByteArray,QString

關於QT內部16進位制、十進位制、QByteArray,QString

QT裡面的資料轉化成十六進位制比較麻煩,其他的int或者byte等型都有專門的函式,而十六進位制沒有特定的函式去轉化,這我在具體的專案中已經解決(參考網上大神)->小專案程式

QT裡面雖然有什麼QString str; str.toInt();等函式,但是用不好的話,會出很大的問題。

QByteArray:這個東西可以存放很多資料,16進位制的資料、字串類的資料等。

 下面這個data接受的是16進位制資料,現在想顯示出來就得轉化成QString,然後再轉化成int型別用於計算 

QByteArray data=tcpSocket->readAll(); //接受16進位制
QString p = data.toHex(); 2 ui->clearLineEdit->setText(p); //轉化成Qstring
data.toInt(0,16) //轉化成int

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

接下來是接受字串的轉化,

QByteArray data=tcpSocket->readAll();  //接受的是字串
QString p = QString(data);   //直接轉化就行了

最後是十進位制轉化成十六進位制的問題(主要用在串列埠和TCP上面),下面程式有幾種表述:
   

char p[3]={0x11,0xab,0x0b}; 把裡面的資料轉化成0x11ab0b傳送! 
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進位制
QByteArray MainWindow::QString2Hex(QString str)
    {
        QByteArray senddata;
        int hexdata,lowhexdata;
        int hexdatalen = 0;
        int len = str.length();
        senddata.resize(len/2);
        char lstr,hstr;
        for(int i=0; i<len; )
        {
            hstr=str[i].toLatin1();   //字元型
            if(hstr == ' ')
            {
                i++;
                continue;
            }
            i++;
            if(i >= len)
                break;
            lstr = str[i].toLatin1();
            hexdata = ConvertHexChar(hstr);
            lowhexdata = ConvertHexChar(lstr);
            if((hexdata == 16) || (lowhexdata == 16))
                break;
            else
                hexdata = hexdata*16+lowhexdata;
            i++;
            senddata[hexdatalen] = (char)hexdata;
            hexdatalen++;
        }
        senddata.resize(hexdatalen);
        return senddata;
    }
 //將1-9 a-f字元轉化為對應的整數
int MainWindow::ConvertHexChar(char ch)
    {
        if((ch >= '0') && (ch <= '9'))
         return ch-'0';
        else if((ch >= 'A') && (ch <= 'F'))
         return ch-'A'+10;
        else if((ch >= 'a') && (ch <= 'f'))
         return ch-'a'+10;
        else return (-1);
    }

上面的程式就是先轉換成16進位制的QString,千萬別寫直接number()沒有裡面引數的轉換!

這是我寫TCP傳送程式的小小總結,網上喲很多這種資料,但是有很多不適合,總結一下,QT裡面的資料轉換一定要明確進位制和型別,其次是呼叫函式裡面引數寫具體!

作者:寂寞的小乞丐
出處:http://www.cnblogs.com/wjy-lulu/
歡迎轉載,必須在文章頁面明顯位置給出原文連線,如需本博文原始碼或者有任何問題,請在博文留下您的郵箱或者問題說明。