最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言中QString與QByteArray互相轉換的方法

 更新時間:2023年05月15日 15:33:17   作者:寧靜致遠2021  
本文主要介紹了C語言中QString與QByteArray互相轉換的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

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

先要說的是QString。

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

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

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

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

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

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

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類同樣不以’\0’為結尾

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開發(fā)串口通訊軟件中的數(shù)據轉換問題

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

在完成串口的初始化等功能之后,實現(xiàn)數(shù)據的讀取轉換。

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

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

QByteArray轉QString

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

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

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

2.向串口寫入命令

十進制int轉16進制格式string

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

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

16進制數(shù)加法

此處參考Qt 十六進制的簡單應用, 十六進制的加法,它是先將數(shù)轉換為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”變?yōu)?x11 0x34,原本占用4字節(jié)內存,現(xiàn)在變?yōu)?字節(jié)。0x31, 0x32, 0x33, 0x34 ==> 0x12 0x34
QByteArray QByteArray::toHex() const
//將0x12 0x34 變?yōu)?“1234”  原本占用2字節(jié)內存,現(xiàn)在變?yōu)?字節(jié) 0x12 0x34 ==> 0x31, 0x32, 0x33, 0x34
int QByteArray::toInt(bool *ok = Q_NULLPTR, int base = 10) const
//Str.toInt(&Ok, 16)將字符串 “1234”變?yōu)閕nt型 0x1234,, 轉換的前提:Str內就是存的字符串,Str內存的不是“0”--“9” “a”--“f”,不能轉換成功
QString(const QByteArray &ba)
//可以將QByteArray轉換為字符串,我認為內存占用,以及數(shù)據都是一樣的,只是類型變了,原來QByteArray表示0x31 0x32 0x33 0x34, 還是同樣的數(shù)據用QString表示了
QString fromUtf8(const QByteArray &);
//將QByteArray轉換為QSting。字符串的編碼方式不同,內存占用以及數(shù)據就不同,但是都可以看成char[] 數(shù)組,在Qt中char 數(shù)組就是QByteArray,因此將不同編碼方式的字符串轉換為QString的函數(shù)入參都是QByteArray
QString number( A, B);
//將數(shù)字轉換為字符串 將A轉變?yōu)锽進制, 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”變?yōu)?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表示,  那么轉換后,內存的數(shù)成了0x88,
QByteArray QString;:toUCS4() const;

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

到此這篇關于C語言中QString與QByteArray互相轉換的方法的文章就介紹到這了,更多相關C語言 QString與QByteArray 內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C++取得當前時間的方法

    C++取得當前時間的方法

    這篇文章主要介紹了C++取得當前時間的方法,實例展示了通過系統(tǒng)函數(shù)獲取當前時間的實現(xiàn)方法,非常簡單易懂,需要的朋友可以參考下
    2014-10-10
  • vc控制臺程序關閉事件時的處理方式及注意點詳解

    vc控制臺程序關閉事件時的處理方式及注意點詳解

    在本篇文章里小編給大家整理的是一篇關于vc控制臺程序關閉事件時的正確處理方式的相關知識點內容,對此有需求的朋友們可以參閱下。
    2021-12-12
  • 使用VSCode和VS2017編譯調試STM32程序的實現(xiàn)

    使用VSCode和VS2017編譯調試STM32程序的實現(xiàn)

    這篇文章主要介紹了使用VSCode和VS2017編譯調試STM32程序的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-05-05
  • 簡單總結C語言中各種類型的指針的概念

    簡單總結C語言中各種類型的指針的概念

    這篇文章主要簡單總結了C語言中各種類型的指針的概念,指針可以說是C語言本身所具有的最大特性,平時根據不同使用場合習慣地將其簡單分類,需要的朋友可以參考下
    2016-03-03
  • C++類實現(xiàn)通訊錄功能

    C++類實現(xiàn)通訊錄功能

    這篇文章主要為大家詳細介紹了C++類實現(xiàn)通訊錄功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • c++ 基于opencv 識別、定位二維碼

    c++ 基于opencv 識別、定位二維碼

    這篇文章主要介紹了c++ 基于opencv 識別、定位二維碼,幫助大家更好的理解和學習使用c++,感興趣的朋友可以了解下
    2021-03-03
  • C語言鏈表案例學習之通訊錄的實現(xiàn)

    C語言鏈表案例學習之通訊錄的實現(xiàn)

    為了將所學到的鏈表的知識進行鞏固學習,做到學以致用,本文將利用鏈表制作一個簡單的通訊錄。文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2022-10-10
  • C語言實現(xiàn)推箱子項目

    C語言實現(xiàn)推箱子項目

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)推箱子項目,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • 純C語言:遞歸最大數(shù)源碼分享

    純C語言:遞歸最大數(shù)源碼分享

    這篇文章主要介紹了純C語言:遞歸最大數(shù)源碼,需要的朋友可以參考一下
    2014-01-01
  • QT中QDockWidget控件的使用小結

    QT中QDockWidget控件的使用小結

    QDockWidget類提供了一個小部件,可以??吭赒MainWindow中,也可以作為桌面上的頂級窗口浮動,本文主要介紹了QT中QDockWidget控件的使用小結,感興趣的可以了解一下
    2024-01-01

最新評論

汪清县| 应用必备| 团风县| 沁源县| 丹阳市| 安溪县| 长岛县| 韶山市| 祁东县| 信阳市| 文登市| 明光市| 磴口县| 二手房| 临夏县| 屏边| 江安县| 钟山县| 平度市| 广德县| 乐平市| 齐齐哈尔市| 商洛市| 瓮安县| 株洲县| 牙克石市| 张北县| 泸州市| 孝义市| 龙陵县| 定南县| 寻甸| 景德镇市| 万年县| 民乐县| 米易县| 吉木萨尔县| 紫金县| 永登县| 富裕县| 漯河市|