国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

QT字節(jié)數(shù)組類QByteArray

這篇具有很好參考價(jià)值的文章主要介紹了QT字節(jié)數(shù)組類QByteArray。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

初始化

#include "myqbytearray.h"
#include "ui_myqbytearray.h"
#include "QDebug"
#include "QtGlobal"

MyQByteArray::MyQByteArray(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MyQByteArray)
{
    ui->setupUi(this);
    qDebug()<<"字節(jié)數(shù)組類的初始化";
    QByteArray ba("hello");
    if('\0'==ba[5]){
        printf("ba[5]=\'\\0\'\n");
    }
    QByteArray ba2("china");
    ba2.fill('q');
    qDebug()<<ba2;
    if('\0'==ba2[5]){
        printf("ba2[5]=\'\\0\'\n");
    }
    ba2.fill('x',2);
    qDebug()<<ba2;
    if('\0'==ba[5]){
        printf("new : ba2[5]=\'\\0\'\n");
    }

}

MyQByteArray::~MyQByteArray()
{
    delete ui;
}

QT字節(jié)數(shù)組類QByteArray,Qt開發(fā),qt,開發(fā)語言
字節(jié)數(shù)組類以 ‘\0’結(jié)尾,索引的下標(biāo)從0開始。
第一次調(diào)用fill函數(shù),不指定size參數(shù),按照之前的長度,跟新值
第二次調(diào)用fill函數(shù),指定size參數(shù),重新調(diào)整字節(jié)數(shù)組的長度,并更新值
QT字節(jié)數(shù)組類QByteArray,Qt開發(fā),qt,開發(fā)語言

訪問某個(gè)元素

訪問QByteArray類對(duì)象的某個(gè)元素有4種方式:

  1. []
  2. at()
  3. data[]
  4. constData[]

其中,[]和data[]可讀可寫,at()和constData[]只讀、

MyQByteArray2::MyQByteArray2(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MyQByteArray2)
{
    ui->setupUi(this);
    QByteArray ba1("hello");
    ba1.resize(10);
    ba1[0] = 'a';
    ba1[1] = 'b';
    ba1[2] = 'c';
    ba1[3] = 'd';
    ba1[4] = 'e';
    ba1[5] = 'f';
    ba1[6] = 'g';
    ba1[7] = 'h';
    ba1[8] = 'i';
    //ba1[9] = 'j';
    qDebug()<<ba1;
    if('\0'==ba1[10]){
        printf("ba1[10] = \'\\0\'\n");
    }
    ba1[1]='a';
    ba1.data()[2] ='a';
    qDebug()<<ba1;
    qDebug()<<ba1.at(1);
    qDebug()<<ba1.constData()[2];
    qDebug()<<ba1.constData()[3];


}

QT字節(jié)數(shù)組類QByteArray,Qt開發(fā),qt,開發(fā)語言
QT字節(jié)數(shù)組類QByteArray,Qt開發(fā),qt,開發(fā)語言

截取字符串

使用函數(shù) left() right() mid()來提取多個(gè)字節(jié)。

MyQByteArray3::MyQByteArray3(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MyQByteArray3)
{
    ui->setupUi(this);
    QByteArray x("pineapple");
    QByteArray y1 = x.left(4);
    qDebug()<<y1;
    QByteArray y2 = x.right(5);
    qDebug()<<y2;
    QByteArray y3 = x.mid(2,4);
    qDebug()<<y3;
    QByteArray y4 = x.mid(2);
    qDebug()<<y4;

}

QT字節(jié)數(shù)組類QByteArray,Qt開發(fā),qt,開發(fā)語言
QT字節(jié)數(shù)組類QByteArray,Qt開發(fā),qt,開發(fā)語言

獲取字節(jié)數(shù)組的大小

成員函數(shù)size(),length(),count()來獲得字節(jié)數(shù)組的大小(除了名字不同,這3個(gè)函數(shù)是相同的)

  1. int size()
  2. int length()
  3. int count()

size()不包括字符串末尾添加的 ‘\0’
如果以字符串形式初始化,中間有‘\0’,則不統(tǒng)計(jì)后面的字符。
如果改變中間的字符,為‘\0’,并不會(huì)被size()截?cái)?/p>

MyQByteArray4::MyQByteArray4(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MyQByteArray4)
{
    ui->setupUi(this);
    QByteArray b4("hello");
    int n1 = b4.size();
    int n2 = b4.size();
    int n3 = b4.size();
    qDebug()<<n1<<"  "<<n2<<"  "<<n3<<"  ";
    b4.data()[3]='\n';
    qDebug()<<b4.size();
    QByteArray b41("he\0llo");
    qDebug()<<b41.size();
}

QT字節(jié)數(shù)組類QByteArray,Qt開發(fā),qt,開發(fā)語言
QT字節(jié)數(shù)組類QByteArray,Qt開發(fā),qt,開發(fā)語言

數(shù)據(jù)轉(zhuǎn)換與處理

Hex轉(zhuǎn)換

QByteArray::fromHex() 將16進(jìn)制編碼的數(shù)據(jù)轉(zhuǎn)換為字符類型的數(shù)據(jù)。
.toHex() 將字節(jié)數(shù)組中,字符轉(zhuǎn)換為十六進(jìn)制的數(shù)值編碼。

MyQByteArray5::MyQByteArray5(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MyQByteArray5)
{
    ui->setupUi(this);
    QByteArray text1 = QByteArray::fromHex("517420697320677265617421");
    qDebug()<<text1.data();
    QByteArray text2 = text1.toHex();
    qDebug()<<text2.data();
}

QT字節(jié)數(shù)組類QByteArray,Qt開發(fā),qt,開發(fā)語言
QT字節(jié)數(shù)組類QByteArray,Qt開發(fā),qt,開發(fā)語言

數(shù)值轉(zhuǎn)換與輸出

QByteArray類的公有靜態(tài)函數(shù)number完成十進(jìn)制到其他進(jìn)制的轉(zhuǎn)換。
調(diào)用靜態(tài)成員函數(shù)

    int n = 63;
    qDebug()<<QByteArray::number(n);
    qDebug()<<QByteArray::number(n,16);
    qDebug()<<QByteArray::number(n,2);
    qDebug()<<QByteArray::number(n,8);

QT字節(jié)數(shù)組類QByteArray,Qt開發(fā),qt,開發(fā)語言
QByteArray類的的公有函數(shù)setNum()

    qDebug()<<ba;
    ba.setNum(n,16);
    qDebug()<<ba;
    ba.setNum(n,8);
    qDebug()<<ba;
    ba.setNum(n,2);
    qDebug()<<ba;

QT字節(jié)數(shù)組類QByteArray,Qt開發(fā),qt,開發(fā)語言
QByteArray::number 將小數(shù)按指定格式的小數(shù)位轉(zhuǎn)換輸出。

    QByteArray ba1 = QByteArray::number(12345.6,'E',3);
    QByteArray ba2 = QByteArray::number(12345.6,'e',3);
    QByteArray ba3 = QByteArray::number(12345.6,'f',3);
    QByteArray ba4 = QByteArray::number(12345.6,'g',3);
    QByteArray ba5 = QByteArray::number(12345.6,'G',3);
    qDebug()<<ba1;
    qDebug()<<ba2;
    qDebug()<<ba3;
    qDebug()<<ba4;
    qDebug()<<ba5;

QT字節(jié)數(shù)組類QByteArray,Qt開發(fā),qt,開發(fā)語言

字母大小寫轉(zhuǎn)換

函數(shù)toUpper和toLower完成字母大小寫轉(zhuǎn)換。

    QByteArray x("hello QT ");
    qDebug()<<x.toLower();
    qDebug()<<x.toUpper();

QT字節(jié)數(shù)組類QByteArray,Qt開發(fā),qt,開發(fā)語言

QT字節(jié)數(shù)組類QByteArray,Qt開發(fā),qt,開發(fā)語言

字符串?dāng)?shù)值轉(zhuǎn)化為各類數(shù)值

字符數(shù)值轉(zhuǎn)化為各類型數(shù)值:to函數(shù)。

    QByteArray strint("1234");
    bool ok0;
    qDebug()<<strint.toInt();
    qDebug()<<strint.toInt(&ok0,16);qDebug()<<ok0;
    qDebug()<<strint.toInt(&ok0,8);qDebug()<<ok0;
    qDebug()<<strint.toInt(&ok0,2);qDebug()<<ok0;  //由于字符串中存在2,3,4等大于2的值,所以不能轉(zhuǎn)化為二進(jìn)制
    qDebug()<<"---------";
    QByteArray strint2("1234.56");
    qDebug()<<strint2.toInt();
    qDebug()<<strint2.toFloat();
    qDebug()<<strint2.toDouble();
    qDebug()<<"---------";
    QByteArray str("FF");
    bool ok2;
    qDebug()<<str.toInt(&ok2,16);
    qDebug()<<str.toInt(&ok2,10);  //字符串中存在F,超過了10和8進(jìn)制的表示范圍。
    qDebug()<<str.toInt(&ok2,8);

QT字節(jié)數(shù)組類QByteArray,Qt開發(fā),qt,開發(fā)語言

QBQyteArray和char*互轉(zhuǎn)

使用.data()成員函數(shù)返回指向字節(jié)數(shù)組中存儲(chǔ)數(shù)據(jù)的指針。
返回一個(gè)指向字節(jié)數(shù)組的指針,指向第一個(gè)字符。

MyQByteArray8::MyQByteArray8(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MyQByteArray8)
{
    ui->setupUi(this);
    QByteArray ba("hello world");
    char* data = ba.data();
    while(*data){
        cout<<" "<<*data;
        data++;
    }
    cout<<endl;
    free(data);
}

QT字節(jié)數(shù)組類QByteArray,Qt開發(fā),qt,開發(fā)語言

QT字節(jié)數(shù)組類QByteArray,Qt開發(fā),qt,開發(fā)語言

QByteArray 和std::string互轉(zhuǎn)

QByteArray的類成員函數(shù):toStdString()
QByteArrayd的靜態(tài)成員函數(shù):fromStdString()

MyQByteArray9::MyQByteArray9(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MyQByteArray9)
{
    ui->setupUi(this);
    QByteArray b1("hello");
    string s2 = b1.toStdString();
    QByteArray b2 = QByteArray::fromStdString(s2);
}

QT字節(jié)數(shù)組類QByteArray,Qt開發(fā),qt,開發(fā)語言

與字符串QString互轉(zhuǎn)

MyQByteArray10::MyQByteArray10(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MyQByteArray10)
{
    ui->setupUi(this);
    QByteArray arr("hello world! ");
    QString str = arr;
    qDebug()<<str;
    qDebug()<<"------------";
    QString str2 ("hello");
    QByteArray ba = str2.toLatin1();
    qDebug()<<ba;
}

QT字節(jié)數(shù)組類QByteArray,Qt開發(fā),qt,開發(fā)語言

QByteArray和自定義結(jié)構(gòu)體之間的轉(zhuǎn)化

定義結(jié)構(gòu)體不能再類中。。。。

根據(jù)char*數(shù)據(jù)和結(jié)構(gòu)體之間的映射,實(shí)現(xiàn)結(jié)構(gòu)體和QByteArray之間的轉(zhuǎn)化。

array.append((char*)&msg,sizeof(msg));
typedef struct Header{
    int channel;
    int type;
}Header;


typedef struct Msg{
    Header header;
    char content[128];
    //友元函數(shù) operator<<
    friend QDebug operator << (QDebug os, Msg msg){
        os << "(" << " channel:" << msg.header.channel << " type:" << msg.header.type
           << " content:" << msg.content << " )";

        return os;
    }
}Msg;

typedef struct PeerMsg
{
    PeerMsg(const int &ip,const int &por) {
        ipv4 = ip;
        port = por;
    }
    int ipv4;
    int port;
    //友元函數(shù) operator<<
    friend QDebug operator << (QDebug os, PeerMsg msg){
        os << "(" << " ipv4:" << QString::number(msg.ipv4) << " port:" << QString::number(msg.port)
           << " )";

        return os;
    }
}PeerMsg;

void func(){
    Msg msg;
    msg.header.channel =1000;
    msg.header.type=2;
    strcpy(msg.content,"hello");
    qDebug()<<msg;

    PeerMsg peermsg(1921681001,10086);
    qDebug()<<peermsg;

    qDebug()<<"struct to QByteArray";
    QByteArray array;
    array.append((char*)&msg,sizeof(msg));
    Msg* pMsg =(Msg*)array.data();                    //將結(jié)構(gòu)體轉(zhuǎn)換為QByteArray
    qDebug()<<*pMsg;

    qDebug()<<"QByteArray to struct";
    QByteArray totalByte;
    totalByte.append((char*)&peermsg,sizeof(peermsg));
    PeerMsg* pPeerMsg =(PeerMsg*)totalByte.data();    //將結(jié)構(gòu)體轉(zhuǎn)換為QByteArray
    qDebug()<<*pPeerMsg;
    

}

QT字節(jié)數(shù)組類QByteArray,Qt開發(fā),qt,開發(fā)語言

QT字節(jié)數(shù)組類QByteArray,Qt開發(fā),qt,開發(fā)語言

判斷是否為空

.isEmpty()

MyQByteArray11::MyQByteArray11(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MyQByteArray11)
{
    ui->setupUi(this);
    qDebug()<<QByteArray("").isEmpty();
    qDebug()<<QByteArray("ss").isEmpty();

}

QT字節(jié)數(shù)組類QByteArray,Qt開發(fā),qt,開發(fā)語言

QT字節(jié)數(shù)組類QByteArray,Qt開發(fā),qt,開發(fā)語言

向前搜索向后搜索

.indexof() 從前向后
.lastIndexOf 從后向前

    QByteArray x("sticky question");
    QByteArray y("sti");
    qDebug()<<x.indexOf(y);
    qDebug()<<x.indexOf(y,6);
    qDebug()<<x.indexOf(y,10);
    qDebug()<<x.indexOf(y,11);

QT字節(jié)數(shù)組類QByteArray,Qt開發(fā),qt,開發(fā)語言

    qDebug()<<x.lastIndexOf(y);
    qDebug()<<x.lastIndexOf(y,8);

QT字節(jié)數(shù)組類QByteArray,Qt開發(fā),qt,開發(fā)語言

插入

    QByteArray ba("Meal");
    ba.insert(2,"hello");
    qDebug()<<ba;

QT字節(jié)數(shù)組類QByteArray,Qt開發(fā),qt,開發(fā)語言

QT字節(jié)數(shù)組類QByteArray,Qt開發(fā),qt,開發(fā)語言文章來源地址http://www.zghlxwxcb.cn/news/detail-604749.html

到了這里,關(guān)于QT字節(jié)數(shù)組類QByteArray的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【Visual Studio】Qt 的實(shí)時(shí)繪圖曲線功能,使用 C++ 語言,配合 Qt 開發(fā)串口通信界面

    【Visual Studio】Qt 的實(shí)時(shí)繪圖曲線功能,使用 C++ 語言,配合 Qt 開發(fā)串口通信界面

    知識(shí)不是單獨(dú)的,一定是成體系的。更多我的個(gè)人總結(jié)和相關(guān)經(jīng)驗(yàn)可查閱這個(gè)專欄:Visual Studio。 戰(zhàn)斗背景:做了個(gè)串口接收界面,用來接收傳輸過來的信號(hào)。但是光用數(shù)字顯示太單調(diào),需要用圖線顯示出來。 戰(zhàn)略目標(biāo):干掉它。 戰(zhàn)術(shù)路線:Qt 繪圖可以使用 Qt Charts,先了解

    2024年02月11日
    瀏覽(28)
  • 【VisualStudio】使用 C++ 語言開發(fā) Qt 環(huán)境配置教程

    【VisualStudio】使用 C++ 語言開發(fā) Qt 環(huán)境配置教程

    知識(shí)不是單獨(dú)的,一定是成體系的。更多我的個(gè)人總結(jié)和相關(guān)經(jīng)驗(yàn)可查閱這個(gè)專欄:Visual Studio。 先上一張效果圖,具體步驟主要分為以下三步。 這一步不再贅述,注意一定要安裝 C++ 語言。 可以參考這個(gè)教程 Visual Studio 2022安裝與使用教程。 這一步也不再贅述,網(wǎng)上搜索教

    2024年02月10日
    瀏覽(26)
  • QT中發(fā)送結(jié)構(gòu)體占用字節(jié)相關(guān)問題

    最近通過上位機(jī)發(fā)送數(shù)據(jù)的時(shí)候,針對(duì)收到的數(shù)據(jù)突然多出幾個(gè)bit產(chǎn)生了疑問。用sizeof來看占據(jù)的字節(jié)大小,發(fā)現(xiàn)和實(shí)際應(yīng)該發(fā)送的不對(duì)。后面查閱了相關(guān)資料,理解了這一部分原因,這里做一個(gè)記錄。 錯(cuò)誤想法: 結(jié)構(gòu)體大小8+2+2=12個(gè)字節(jié) 原因: 計(jì)算結(jié)構(gòu)體大小時(shí)需要考慮

    2024年02月15日
    瀏覽(16)
  • 【VisualStudio】基于 Visual Studio 使用 C++ 語言開發(fā) Qt 環(huán)境配置教程

    【VisualStudio】基于 Visual Studio 使用 C++ 語言開發(fā) Qt 環(huán)境配置教程

    知識(shí)不是單獨(dú)的,一定是成體系的。更多我的個(gè)人總結(jié)和相關(guān)經(jīng)驗(yàn)可查閱這個(gè)專欄:Visual Studio。 先上一張效果圖,具體步驟主要分為以下三步。 這一步不再贅述,注意一定要安裝 C++ 語言。 可以參考這個(gè)教程 Visual Studio 2022安裝與使用教程。 這一步也不再贅述,網(wǎng)上搜索教

    2024年02月15日
    瀏覽(26)
  • 【Visual Studio】使用 C++ 語言,配合 Qt,開發(fā)了一個(gè)串口通信界面

    【Visual Studio】使用 C++ 語言,配合 Qt,開發(fā)了一個(gè)串口通信界面

    知識(shí)不是單獨(dú)的,一定是成體系的。更多我的個(gè)人總結(jié)和相關(guān)經(jīng)驗(yàn)可查閱這個(gè)專欄:Visual Studio。 我要使用的功能比較簡單,主要包含掃描串口、打開串口、發(fā)送數(shù)據(jù)、接收數(shù)據(jù)、暫停按鈕、停止按鈕,因此接下里將圍繞這幾個(gè)功能依次更新。 我的工程項(xiàng)目名字叫 “GUI”。

    2024年02月11日
    瀏覽(20)
  • 【Visual Studio】報(bào)錯(cuò) C2653,使用 C++ 語言,配合 Qt 開發(fā)串口通信界面

    【Visual Studio】報(bào)錯(cuò) C2653,使用 C++ 語言,配合 Qt 開發(fā)串口通信界面

    知識(shí)不是單獨(dú)的,一定是成體系的。更多我的個(gè)人總結(jié)和相關(guān)經(jīng)驗(yàn)可查閱這個(gè)專欄:Visual Studio。 這個(gè) Bug 是我做這個(gè)工程時(shí)遇到的:【Visual Studio】Qt 的實(shí)時(shí)繪圖曲線功能,使用 C++ 語言,配合 Qt 開發(fā)串口通信界面。 使用 C++ 語言,配合 Qt 開發(fā)串口通信界面,在添加 Widget 做

    2024年02月11日
    瀏覽(31)
  • 【Visual Studio】報(bào)錯(cuò) ASSERT: “i >= 0 && i < size()“,使用 C++ 語言,配合 Qt 開發(fā)串口通信界面

    【Visual Studio】報(bào)錯(cuò) ASSERT: “i >= 0 && i < size()“,使用 C++ 語言,配合 Qt 開發(fā)串口通信界面

    知識(shí)不是單獨(dú)的,一定是成體系的。更多我的個(gè)人總結(jié)和相關(guān)經(jīng)驗(yàn)可查閱這個(gè)專欄:Visual Studio。 這個(gè) Bug 是我做這個(gè)工程時(shí)遇到的:【Visual Studio】Qt 的實(shí)時(shí)繪圖曲線功能,使用 C++ 語言,配合 Qt 開發(fā)串口通信界面。 使用 C++ 語言,配合 Qt 開發(fā)串口通信界面,在調(diào)試動(dòng)態(tài)繪圖

    2024年02月11日
    瀏覽(24)
  • <QT開發(fā)> QT開發(fā)工具-之-QT應(yīng)用程序打包

    <QT開發(fā)> QT開發(fā)工具-之-QT應(yīng)用程序打包

    <QT開發(fā)> QT開發(fā)工具-之-QT應(yīng)用程序打包 筆者為什么會(huì)寫這篇文章呢?這是因?yàn)?,筆者使用windows QT開發(fā)了一個(gè)測(cè)試工具。目的是通過TCP/IP測(cè)試其它應(yīng)用程序。首先這個(gè)QT程序是筆者自己開發(fā)的,所以筆者的電腦當(dāng)然是可以運(yùn)行這個(gè)QT程序的,但是想要這個(gè)QT程序在其它同事的

    2024年02月12日
    瀏覽(842)
  • 【Qt】Qt 開發(fā)環(huán)境安裝 ( Qt 版本 5.14.2 | Qt 下載 | Qt 安裝 )

    【Qt】Qt 開發(fā)環(huán)境安裝 ( Qt 版本 5.14.2 | Qt 下載 | Qt 安裝 )

    Qt 開發(fā)環(huán)境下載地址 : https://download.qt.io/archive/qt/ 該界面可以下載 Qt 各個(gè)版本的開發(fā)環(huán)境 ; Qt 版本選擇 , Qt 的各個(gè)大版本都在同步更新 , 如 5.1 , 5.9 , 5.14 , 6.0 等 , 每個(gè)版本都有不同的性能和功能 , 每個(gè)版本進(jìn)入后的二級(jí)目錄的小版本 , 盡量選擇最新的版本 ; 如進(jìn)入 5.14 目錄后

    2024年02月14日
    瀏覽(119)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包