Qt中QString、QByteArray、int、double之間轉換


最近寫Qt中的tcp網絡編程,Socke連接后,接受到的數據類型是字節型,這就涉及到了大量的類型轉換,在網上輾轉幾輒,總算有了點結果,特此跟大家分享。好了,不廢話,下面細說。

方法/步驟

 
  1.  

    1.打開Qt Creator,我的是2.8.1版本。新建工程,應該包含了基本類型的頭文件,這里就不詳細說了,因為Qt中的頭文件與類名是一樣的。

  2.  

    2.首先來兩個int類型的數據(或double型):

    int int_head=5;

    int int_data=10;

    這里的值是隨便定的,我的是Socket接收到的數據。

  3.  

    3.首先將int型(double型)轉換為QString型:

    QString str_head=QString::number(head,2);

    QString str_data=QString::number(data,2);

    number方法的第一個參數就是第2步驟的int類型數據(或double型);

    第二個參數表示進制數,如果你想轉換為二進制字符串,參數值就為2,十進制就是10,其他進制同理。

    上述兩個語句結果為:Head="101"; Data="1010";

  4.  

    4.將int型(double型)轉換為QByteArray型:

    QByteArray byte_head,byte_data;

    byte_head.resize(4);

    byte_data.resize(4);

    memcpy(byte_head.data(),&int_head,sizeof(int_head));

    memcpy(byte_data.data(),&int_data,sizeof(int_data));

    這里使用內存復制函數memcpy將int類型復制到QByteArray字節類型

    //

    如果是將兩個數據復制到一個字節變量中,可以這樣寫:

    QByteArray byte;

    byte.resize(2*sizeof(int));

    memcpy(byte.data(),&int_head,sizeof(int_head));

    memcpy(byte.data(),&int_data,sizeof(int_data));

    也就是改了一下byte的大小。

  5.  

    5.QString與QByteArray之間的相互轉換:

    QString str_head,QString str_data;

    QByteArray byte_head,byte_data;

    //

    QByteArray轉換為QString語句非常簡單:

    str_head=QByteArray(byte_head);

    str_data=QByteArray(byte_data);

    或者是這樣:

    str_head=byte_head.data();

    str_data=byte_data.data();

    //

    同理,QString轉換為QByteArray字節型:

    byte_head=QString(str_head);

    byte_data=QString(str_data);

    或者是這樣:

    byte_head=str_head.toLatin1();

    byte_data=str_data.toLatin1();

    當然,前提是必須先給要轉換變量進行賦值!

  6.  

    6.QString、QByteArray轉換為int型(double型):

    bool ok;

    int int_head=str_head.toInt(&ok,2);

    int int_data=str_data.toInt(&ok,2);

    //

    QByteArray要首先轉換為QString型,在轉換為int型:

    int int_head=byte_head.data().toInt(&ok,2);

    int int_data=byte_data.data().toInt(&ok,2);

    讀者可以通過ok的值來判斷轉換是否成功。

    END

轉自:https://jingyan.baidu.com/article/a3761b2b8f4f3b1576f9aae3.html


免責聲明!

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



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