Qt入门系列开发教程【数据类型篇】QByteArray字符数组类常用 *** 作

Qt入门系列开发教程【数据类型篇】QByteArray字符数组类常用 *** 作,第1张

Qt入门系列开发教程【数据类型篇】QByteArray字符数组类常用 *** 作

来了,老弟,不收藏你就后悔吧 !****点赞收藏⭐️留言 不迷路~~~

「作者主页 」:鱼酱2333
「 B站首页 」:鱼酱2333
「本文录入专栏」:Qt入门系列开发教程
「本文内容」:Qt中QByteArray 常用 *** 作

文章目录

0.应用场景1.QByteArray

简介增删查改 2. *** 作例子

1.构造函数初始化2.使用函数初始化3.深拷贝与浅拷贝4.赋值5.判空6.访问7.添加(头部添加、插入、尾巴添加)8.查找、替换、截取9.删除10.QByteArray -> char数组11.char数组->QByteArray12.16进制字符串转QByteArray13.QByteArray转字符串14.遍历与查找15.数字转QByteArray16.格式化17.大小端转换技巧

0.应用场景

二进制或者、16进制数据的存储、char数组的存储。

1.QByteArray 简介

QByteArray 可用于存储原始字节(包括 '’s)和传统的 8 位以 ‘’ 结尾的字符串。使用 QByteArray 比使用 const char * 方便得多。在幕后,它始终确保数据后跟一个 ‘’ 终止符,并使用隐式共享(copy-on-write)来减少内存使用并避免不必要的数据复制。

除了 QByteArray,Qt 还提供了 QString 类来存储字符串数据。对于大多数用途,QString 是您要使用的类。它存储 16 位 Unicode 字符,从而可以轻松地在您的应用程序中存储非 ASCII/非拉丁 1 字符。此外,QString 在 Qt API 中贯穿始终。 QByteArray 适用的两种主要情况是当您需要存储原始二进制数据时,以及当内存保护至关重要时(例如,对于嵌入式 Linux 的 Qt)。
初始化 QByteArray 的一种方法是简单地将 const char * 传递给其构造函数。例如,以下代码创建一个大小为 5 的字节数组,其中包含数据“Hello”:

  QByteArray ba("Hello");

对于QByteArray *** 作可以分为:增、删、查、改

//将字节数组 附加到此字节数组的末尾。
QByteArray &append(const QByteArray &ba)
//在索引位置 i 处插入数据并返回对此字节数组的引用。
QByteArray &insert(qsizetype i, QByteArrayView data)

//浅拷贝数据
QByteArray fromRawData(const char *data, qsizetype size)

//将字节数组 ba 附加到此字节数组并返回对此字节数组的引用。
QByteArray &QByteArray::prepend(QByteArrayView ba)

//返回一个字节数组,将整数 n 表示为文本。
QByteArray number(int n, int base = 10)
QByteArray number(uint n, int base = 10)
QByteArray number(long n, int base = 10)
QByteArray number(ulong n, int base = 10)
QByteArray number(qlonglong n, int base = 10)
QByteArray number(qulonglong n, int base = 10)
QByteArray number(double n, char format = 'g', int precision = 6)
//清空
void clear()
//从数组中删除 len 个字节,从索引位置 pos 开始,并返回对数组的引用。
QByteArray &remove(int index, int len);
//正序查找
int indexOf(char c, int from = 0) const;
int indexOf(const char *c, int from = 0) const;
int indexOf(const QByteArray &a, int from = 0) const;
//倒叙查找
int lastIndexOf(char c, int from = -1) const;
int lastIndexOf(const char *c, int from = -1) const;
int lastIndexOf(const QByteArray &a, int from = -1) const;

//以XX开头
bool startsWith(const QByteArray &a) const;

//是否包含字符
bool contains(char c) const;

//统计字符
int count(char c) const;

//替换
QByteArray &replace(int index, int len, const char *s);
//分割
QList split(char sep) const;
//返回一个字节数组,其中包含此字节数组最左边的 len 个字节。
QByteArray left(int len) const;
//返回一个字节数组,其中包含此字节数组最右边的 len 个字节。
QByteArray right(int len) const;
//从位置 pos 返回一个包含来自该字节数组的 len 个字节的字节数组。
QByteArray mid(int index, int len = -1) const;
//从字节数组的末尾删除 n 个字节。
void QByteArray::chop(int n)
//返回一个字节数组,其中包含该字节数组最左边的 size() - len 个字节。
QByteArray chopped(int len) const
2. *** 作例子 1.构造函数初始化
//1.初始化
void demo1()
{
    //构造函数初始化
    QByteArray arr1("hello");

    QByteArray arr2(arr1);
    QByteArray arr3(3,'a');

    //深拷贝初始化
    const char cart[] = {'c', 'a', '', 'r', '', 't'};
    QByteArray arr4(cart,6);
    QByteArray arr5={0x04,0x02};


    qDebug()< 

“hello” “68656c6c6f”
“hello” “68656c6c6f”
“aaa” “616161”
“cax00rx00t” “636100720074”
“02020202”

2.使用函数初始化
void demo2()
{
 QByteArray ba("Istambul");
 ba.fill('o');
 // ba == "oooooooo"

 ba.fill('X', 2);
 // ba == "XX"
}
3.深拷贝与浅拷贝
void demo2()
{

    //浅拷贝初始化
    const char cart[] = {'c', 'a', '', 'r', '', 't'};
    QByteArray ba1(QByteArray::fromRawData(cart, 6));
    
    //深拷贝
    QByteArray ba2(cart,6);
}
4.赋值
//4赋值
void demo4()
{
    //使用等号赋值
    QByteArray arr;
    arr.resize(3);
    arr[0]=static_cast(0x30);
    arr[1]=static_cast(0x31);
    arr[2]=static_cast(0x32);
    qDebug()< 

“012” “303132”

5.判空

如果字节数组的大小为0,则返回true;否则返回false。

 QByteArray().isEmpty();         // returns true
 QByteArray("").isEmpty();       // returns true
 QByteArray("abc").isEmpty();    // returns false




如果此字节数组为空,则返回true;否则返回false。

 QByteArray().isNull();          // returns true
 QByteArray("").isNull();        // returns false
 QByteArray("abc").isNull();     // returns false
6.访问
void demo6()
{
    QByteArray arr("hello");
    //[]访问
    qDebug()<< arr[0];
    //使用at访问
    qDebug()<< arr.at(0);
}
7.添加(头部添加、插入、尾巴添加)
void demo7()
{
     qDebug()<<"---------";
    {

        QByteArray arr(2,'a');
        QByteArray arrtemp(2,'d');

        qDebug()<(0x30));
        qDebug()<(0x30));
        qDebug()<(0x30));
        qDebug()< 

输出

---------
"6161"
"306161"
"6464306161"
---------
"6161"
"616130"
"6161306464"
---------
"6161"
"613061"
"6130616464"

8.查找、替换、截取
void  demo8()
{
    //查找
    {
        QByteArray arr("helloworld");
        //从前往后
        qDebug()< 
9.删除 
void  demo9()
{
    {

        QByteArray x("apple");
        x.remove(1,2);//ale

    }


    {
        QByteArray x("apple");
        x.clear();// 空的
    }

    {
        QByteArray x("apple");//pple
        x.erase(x.begin(),x.begin()+1);

        QByteArray y("apple");//e
        y.erase(y.begin(),y.end()-1);
    }

}
10.QByteArray -> char数组
void demo10()
{
    QByteArray arr(6,'a');
    char*p = arr.data();


    //浅拷贝
    char *pArr = new char[6];
    pArr = arr.data();


    //深拷贝
    char *pArr2 = new char[6];
    memcpy(pArr2,arr.data(),6);


}
11.char数组->QByteArray
void demo11()
{

   //浅拷贝初始化
    const char cart[] = {'c', 'a', '', 'r', '', 't'};
    QByteArray ba1(QByteArray::fromRawData(cart, 6));

    //深拷贝
    QByteArray ba2(cart,6);

}
12.16进制字符串转QByteArray
char char2hex(char v)
{
    if(v >= '0' && v <= '9')
    {
        v -= '0';
    }
    else if(v >= 'a' && v <= 'f')
    {
        v = v - 'a' + 10;
    }
    else if( (v >= 'A' && v <= 'F'))
    {
        v = v - 'A' + 10;
    }

    return v;
}



QByteArray hexStringtobytearray(QString strHex)
{
    bool isAddZero = (strHex.size()%2) > 0;
    if(isAddZero)
    {
        strHex.insert(0,QString("0"));
    }
    QByteArray ret;

    char hcode, lcode, val;

    for(quint16 i=0; i 
13.QByteArray转字符串 
void demo13()
{
    QByteArray arr("hello");
    QString str= arr;
}

14.遍历与查找
void demo14()
{
    char p[] = {static_cast(0xFF),static_cast(0xFF),static_cast(0xFF)};
    QByteArray arr(p,sizeof(p));
    for(auto it:arr)
    {
        qDebug()<void demo15()
{
 QByteArray ba;
 int n = 63;
 ba.setNum(n);           // ba == "63"
 ba.setNum(n, 16);       // ba == "3f"
}
16.格式化
void demo16()
{
//删除转义字符
 QByteArray ba("  lotst ofnwhitespacern ");
 ba = ba.trimmed();
 // ba == "lotst ofnwhitespace";


 QByteArray x("Qt by THE QT COMPANY");
 QByteArray y = x.toUpper();
 // y == "QT BY THE QT COMPANY"

}
17.大小端转换技巧
//包含下面的头文件,该头文件包含所有的大小端转换方法,but 只有高版本Qt有
//低版本建议使用memcpy
#include 
void demo17()
{
    QByteArray arr;
    arr.resize(8);
    qint64 i = 1;
    memcpy(arr.data(),&i,8);
    qDebug()<(6),arr2.data());
    qDebug()< 

输出

"0100000000000000"
"0000000000000001"
"06000000"

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5703075.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存