91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言如何解決QString與QByteArray互相轉換的問題

發布時間:2023-05-26 10:00:37 來源:億速云 閱讀:149 作者:栢白 欄目:開發技術

今天小編給大家分享的是C語言如何解決QString與QByteArray互相轉換的問題,相信很多人都不太了解,為了讓大家更加了解,所以給大家總結了以下內容,一起往下看吧。一定會有所收獲的哦。

目錄
  • [1] QString與QByteArray互相轉換的方法

    • QString轉QByteArray方法

    • QByteArray轉QString方法

    • QByteArray類同樣不以’\0’為結尾

  • [2] Qt開發串口通訊軟件中的數據轉換問題

    • 1.讀取串口命令-QByteArray轉QString,QString轉float

    • 2.向串口寫入命令

  • [3] QT QString與QByteArray的相互轉換

    [1] QString與QByteArray互相轉換的方法

    先要說的是QString。

    之所以把QString單獨拿出來,是因為string是很常用的一個數據結構,甚至在很多語言中,比如JavaScript,都是把string作為一種同int等一樣的基本數據結構來實現的。

    每一個GUI程序都需要string,這些string可以用在界面上的提示語,也可以用作一般的數據結構。C++語言提供了兩種字符串的實現:C風格的 字符串,以’/0‘結尾;std::string,即標準模版庫中的類。Qt則提供了自己的字符串實現:QString。QString以16位 Uniode進行編碼。我們平常用的ASCII等一些編碼集都作為Unicode編碼的子集提供。關于編碼的問題,我們會到以后的時候再詳細說明。

    在使用QString的時候,我們不需要擔心內存分配以及關于’/0’結尾的這些注意事項。QString會把這些問題解決。通常,你可以把 QString看作是一個QChar的向量。另外,與C風格的字符串不同,QString中間是可以包含’/0’符號的,而length()函數則會返回 整個字符串的長度,而不僅僅是從開始到’/0’的長度。

    同Java的String類類似,QString也重載的+和+=運算符。這兩個運算符可以把兩個字符串連接到一起,正像Java里面的操作一樣。QString可以自動的對占用內存空間進行擴充,這種連接操作是恨迅速的。下面是這兩個操作符的使用:

    QStringstr="User:";
    str+=userName+"/n";

    QString的append()函數則提供了類似的操作,例如:

    str="User:";
    str.append(userName);
    str.append("/n");

    QString轉QByteArray方法

    //Qt5.3.2
    QString str("hello");  
    QByteArray bytes = str.toUtf8(); // QString轉QByteArray方法1 
    QString str("hello");  
    QByteArray bytes = str.toLatin1();  // QString轉QByteArray方法2

    QByteArray轉QString方法

    //Qt5.3.2
        QByteArray bytes("hello world");
        QString string = bytes;   // QByteArray轉QString方法1
        QByteArray bytes("hello world");
        QString string;
        string.prepend(bytes);// QByteArray轉QString方法2
        qDebug() << string;

    QByteArray類同樣不以&rsquo;\0&rsquo;為結尾

    QByteArray bytes;  
    bytes.resize(5);  
    bytes[0] = '1';  
    bytes[1] = '2';  
    bytes[2] = '3';  
    bytes[3] = '\0';  
    bytes[4] = 'a';  
    cout << bytes << endl;

    QByteArray轉QString,主要用buf.toHex()即可

        static QString ByteArrayToHexStr(QByteArray buf)
        {
            QString retStr;
            retStr.append(buf.toHex());
            return retStr;
        }

    [2] Qt開發串口通訊軟件中的數據轉換問題

    在利用Qt進行串口程序開發過程中,除了與串口通訊的功能實現以外,數據的轉換也是比較麻煩的一件事,本篇主要介紹串口通訊中數據轉換的問題,關于功能實現大家在網上搜索就能找到相關案例。

    在完成串口的初始化等功能之后,實現數據的讀取轉換。

    1.讀取串口命令-QByteArray轉QString,QString轉float

    從串口接收到的數據形如:“0010101821&hellip;”的16進制數,串口返回QByteArray的數據格式,通過以下方式轉換為QString,再通過截取數據中某幾位,按照16進制格式轉換為10進制使用。

    QByteArray轉QString

    static QString serialBuffer;
    QByteArray serialBufferTmp=m_serialPort->readAll();
    serialBuffer=serialBuffer.append(serialBufferTmp);

    截取第8位后4位的16進制數,并QString轉float

    QString strValue=serialBuffer.mid(8,4);
    float floatValue=strValue.toInt(nullptr,16)

    2.向串口寫入命令

    十進制int轉16進制格式string

    通常我們從Qt開發的界面中使用QLineEdit輸入的是十進制類型的,而為了串口處理需要將其轉換為16進制格式,再通過處理成串口可以解析的格式,例如十進制50轉換為16進制的“32”,代碼如下:

    int Num=dec2HexInputEdit->text().toInt();
    QString hexString=QString::number(Num,16)

    16進制數加法

    此處參考Qt 十六進制的簡單應用, 十六進制的加法,它是先將數轉換為10進制,相加后再轉換為QString

    QString hexAri(QString str, int addend)
    {
        bool ok;
        int dec = str.toUInt(&ok, 16);
        QString tmp = QString("%1").arg(dec + addend, 5, 16, QLatin1Char('0');
        return tmp;
    }

    [3] QT QString與QByteArray的相互轉換

    QByteArray(const char *data, int size = -1) 
    //QByteArray Str("1234")  內存中存儲可能就是對應的ASSIC:0x31, 0x32, 0x33, 0x34
    QByteArray QByteArray::fromHex(const QByteArray &hexEncoded)
    //將字符串的“1234”變為0x11 0x34,原本占用4字節內存,現在變為2字節。0x31, 0x32, 0x33, 0x34 ==> 0x12 0x34
    QByteArray QByteArray::toHex() const
    //將0x12 0x34 變為 “1234”  原本占用2字節內存,現在變為4字節 0x12 0x34 ==> 0x31, 0x32, 0x33, 0x34
    int QByteArray::toInt(bool *ok = Q_NULLPTR, int base = 10) const
    //Str.toInt(&Ok, 16)將字符串 “1234”變為int型 0x1234,, 轉換的前提:Str內就是存的字符串,Str內存的不是“0”--“9” “a”--“f”,不能轉換成功
    QString(const QByteArray &ba)
    //可以將QByteArray轉換為字符串,我認為內存占用,以及數據都是一樣的,只是類型變了,原來QByteArray表示0x31 0x32 0x33 0x34, 還是同樣的數據用QString表示了
    QString fromUtf8(const QByteArray &);
    //將QByteArray轉換為QSting。字符串的編碼方式不同,內存占用以及數據就不同,但是都可以看成char[] 數組,在Qt中char 數組就是QByteArray,因此將不同編碼方式的字符串轉換為QString的函數入參都是QByteArray
    QString number( A, B);
    //將數字轉換為字符串 將A轉變為B進制, A=10  B=16  轉換為“a” :  10 = 0x0A ; A=10  B=10  轉換為“10”
    int QString::toInt(bool *ok = Q_NULLPTR, int base = 10) const 
    //base = 16,將字符串 “12”變為 0x12
    QByteArray QString::toLatinl() const; 
    //將QString編碼的字符串轉換到 其他類型的字符串編碼
    QByteArray QString::toUtf8() const;
    //舉例: 字符串“1”,在內存中就是0x31 (ASSIC 0x31表示1),只不過存儲方式是QString的編碼,假如Utf8與QString的編碼一樣,轉換出來后,還是0x31
    QByteArray QString::toLocal8Bit() const; 
    //假如 Local8Bit中 “1” 用16進制0x88表示,  那么轉換后,內存的數成了0x88,
    QByteArray QString;:toUCS4() const;

    Latin1:SO-8859-1編碼是單字節編碼,向下兼容ASCII,其編碼范圍是0x00-0xFF
    utf8字符集以2個或以上的字節表示一個漢字,實際上具體的數值和unicode有很大的相關性
    unicode字符集以2個或以上的字節表示一個漢字。
    gb18030字符集兼容了gbk字符集,以兩個字節表示一個文字。windows系統可能使用的就是這兩種的一種。
    UCS:通用字符集(Universal Character Set, UCS)是由ISO制定的ISO 10646(或稱ISO/IEC 10646)標準所定義的標準字符集。UCS-2用兩個字節編碼,UCS-4用4個字節編碼。

    關于C語言如何解決QString與QByteArray互相轉換的問題就分享到這里了,希望以上內容可以對大家有一定的參考價值,可以學以致用。如果喜歡本篇文章,不妨把它分享出去讓更多的人看到。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    宁强县| 东港市| 金溪县| 龙里县| 长白| 襄城县| 久治县| 从化市| 太原市| 高碑店市| 大余县| 苏尼特右旗| 珠海市| 高台县| 江安县| 密云县| 西藏| 仁寿县| 扎兰屯市| 宜春市| 驻马店市| 大方县| 平潭县| 义马市| 团风县| 蒲城县| 准格尔旗| 桐庐县| 方城县| 昔阳县| 鄂托克前旗| 广元市| 五常市| 乌拉特后旗| 寿阳县| 德庆县| 无极县| 潮安县| 建平县| 定边县| 申扎县|