QString与QByteArray

QString与QByteArray

QString

1、字符串拼接

void fun(){
    QString str1="C";
    QString str2=str1+"++";//使用+进行字符串拼接
    qDebug()<<str2;//C++

    str1.append("#");//使用append()进行字符串拼接,会重新赋值给本身
    qDebug()<<str1;//C#

    str1.prepend("--");
    qDebug()<<str1;//--C#

    QString status=QString("使用占位符进行替换,%1,%2").arg(str1).arg(str2);
    qDebug()<<status;//"使用占位符进行替换,--C#,C++"

}

2、字符串长度计算

QString str="你好!";
qDebug()<<str.count();//3
qDebug()<<str.length();//3
qDebug()<<str.size();//3

3、字符串判空

    QString str1;
    QString str2="";
    qDebug()<<str1.isNull();//true
    qDebug()<<str2.isNull();//false
    qDebug()<<str1.isEmpty();//true
    qDebug()<<str2.isEmpty();//true

isNull(和isEmpty()两个函数都判断字符串是否为空,但是稍有差别。如果一个空字符串,只有"\0”,isNull()返回false,而isEmpty()返回true;只有未赋值的字符串,isNull()才返回true。

4、判断是否包含子字符串

    QString str="Qt";
    bool b=str.contains("QT",Qt::CaseInsensitive);//大小写不敏感
    bool b2=str.contains("QT",Qt::CaseSensitive);//大小写敏感
    qDebug()<<b;//true
    qDebug()<<b2;//false

5、数字转换

    QString s="123.3";
    // int toInt(bool *ok=nullptr, int base=10) const
    //@Param ok:是否正确转换   base:进制
    qDebug()<<s.toInt();//0
    qDebug()<<s.toDouble();//123.3

//数字转QString
    double i=123.132;
    qDebug()<<QString::number(i);//"123.132"
    qDebug()<<QString::number(i,'f',2);//"123.13"

6、提取子串

    QString str;
    QString csv="forename,middlename,surname,phone";
    QString path="/usr/local/bin/myapp";

    QString::SectionFlag flag=QString::SectionSkipEmpty;//在分割字符串时跳过空段。

    str=csv.section(',',2,2);//第2个开始到第2个截止
    qDebug()<<str;//surname
    str=path.section('/',3,4);
    qDebug()<<str;//"bin/myapp"
    str=path.section("/",3,3,flag);
    qDebug()<<str;//"myapp" 第一个/左边为0,跳过空段,则第一个/的右边为0

7、字符串分割

    QString strs="a,b,c";
    QStringList list1=strs.split(',');
    qDebug()<<list1;//QList("a", "b", "c")

8、字符串移除

    QString t="Ali BaBa";
    t.remove(QChar('a'),Qt::CaseInsensitive);//删除a,且大小写不敏感
    qDebug()<<t;//"li BB"
    QString t1="Ali BaBa";
    t1.remove('A');
    qDebug()<<t1;//"li BaBa"

QByteArray

在Qt中QByteArray可以看做是c语言中char类型的动态数组。我们在使用这种类型的时候可通过这个类的构造函数申请一块动态内存,用于存储我们需要处理的数据。

1、构造函数

QByteArray()
QByteArray(const char *data,int size =-1)
QByteArray(int size,char ch)

QByteArray(const QByteArray &other)
QByteArray(QByteArray &&other)

eg:

    QByteArray a;
    QByteArray b("hello");
    char buf[]={10,20,30};
    QByteArray c(buf,sizeof(buf));
    QByteArray d(c);

2、成员访问

    QByteArray a;
    QByteArray b("hello");
    char buf[]={10,20,30};
    QByteArray c(buf,sizeof(buf));
    QByteArray d(c);
    //[]
    for(int i=0;i<b.size();i++){
        qDebug()<<b[i];
    }

    //at
    for(int i=0;i<c.size();i++){
        qDebug()<<(int)c.at(i);
    }

    //data()
    char *data=d.data();
    while(*data){
        qDebug()<<(int)*data;
        data++;
    }

3、数组信息

判断是否为空

    qDebug()<<QByteArray().isEmpty();//true
    qDebug()<<QByteArray().isNull();//true

    qDebug()<<QByteArray("").isEmpty(); //true
    qDebug()<<QByteArray("").isNull(); //false

获取长度

    char buf[]={10,20,30};
    QByteArray c(buf,sizeof(buf));
    //获取占用内存大小
    qDebug()<<"capacity:"<<c.capacity();// 3
    c.append(40);
    c.append(50);
    qDebug()<<"capacity:"<<c.capacity();//14 占用内存大小不一定等于size
    qDebug()<<"count:"<<c.count();//5
    qDebug()<<"size:"<<c.size();//5
    qDebug()<<"length:"<<c.length();//5

4、数据操作

//在尾部追加数据
QByteArray &QByteArray:append(const QByteArray &ba);
void QByteArray:push_back(const QByteArray &other);
//头部添加数据
QByteArray &QByteArray:prepend(const QByteArray &ba);
void QByteArray:push front(const QByteArray &other);

//插入数据,将ba插入到数组第i个字节的位置(从0开始)
QByteArray &QByteArray:insert(int i,const QByteArray &ba);
//删除数据
//删除Len个字符,从第pos个字符的位置开始删除
QByteArray &QByteArray:remove(int pos,int len);
//从尾部删除n个字节
void QByteArray:chop(int n);

/从字节数组的Pos位置将数组截断(前边部分留下,后边部分被删除)
void QByteArray:truncate(int pos);

//将对象中的数据清空,使其为nuLL
void QByteArray:clear();

5、十六进制处理

//QByteArray转换成16进制
QByteArray QByteArray:toHex()const
QByteArray QByteArray:toHex(char separator)const

//16进制转化成QByteArray
[static]QByteArray QByteArray:fromHex(const QByteArray &hexEncoded)

eg:

    QByteArray hex=QByteArray("hello").toHex();
    qDebug()<<hex.data();//68656c6c6f

    QByteArray hex2=QByteArray("hello").toHex(':');
    qDebug()<<hex2.data();//68:65:6c:6c:6f


    QByteArray text=QByteArray::fromHex("68656c6c6f");
    qDebug()<<text;//"hello"

QString与QByteArray之间的转换

1、string与QByteArray

//string转QByteArray
    std::string str="hello";
    QByteArray qba=QByteArray::fromStdString(str);
    qDebug()<<qba.data();//hello
    
//QByteArray转string
    std::string str2=qba.toStdString();
    qDebug()<<str2;//"hello"

2、QString与QByteArray

    //QByteArray转QString
    QByteArray q1=QByteArray("hello");
    QString str=QString(q1);
    qDebug()<<str;//"hello"

//QString转QByteArray
    QByteArray ba1=str.toLatin1();//ASCII编码
    qDebug()<<ba1;
    QByteArray ba2=str.toLocal8Bit();//使用本地操作系统的编码
    qDebug()<<ba2;
    QByteArray ba3=str.toUtf8();//utf8
    qDebug()<<ba3;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值