QString和QByteArray的区别

本质

QString是对QByteArray的再次封装

在这里插入图片描述

QString可以通过char*来构造,也可以通过QByteArray来构造

QByteArray就是char*
QString是编码后的char*

QString也是封装了字符串, 但是内部的编码为utf8, UTF-8属于Unicode字符集, 它固定使用多个字节(window为2字节, linux为3字节)来表示一个字符

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

格式转换

可以将QString转换为QByteArray
在这里插入图片描述

QString ->QByteArray ->char*

    qDebug()<<"char* to QString";
    char* c_str = "hello";
    QString string  = QString (QLatin1String(c_str));
    qDebug()<<string;
    qDebug()<<"QString to char* (two step)";
    QString string2("hello2");
    std::string a1 = string2.toLocal8Bit().data();
    std::string a2 = string2.toLatin1().data();
    std::string a3 = string2.toUtf8().data();
    std::cout<<a1<<std::endl;
    std::cout<<a2<<std::endl;
    std::cout<<a3<<std::endl;

在这里插入图片描述

QString字符串格式化打印

 QString aa = QString("大家好,我是(%1),我的工号是(%2),我宣布(%3)!!!").arg("王健林").arg(001).arg("取消加班");
 qDebug()<<aa;

在这里插入图片描述

长度

QString计算的是字符数目
QByteArray计算的是字节数(汉字3字节,英文1字节,数字1字节)

    QString a1 = "我a1";
    QByteArray a2 = "我a1";
    qDebug()<<a1.length()<<a2.length();

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: QStringQByteArray是Qt中常用的两种字符串类型。它们的区别在于: 1. QString是Unicode字符串,支持多语言字符集,而QByteArray是字节串,只支持ASCII码字符集。 2. QString可以直接进行字符串操作,如拼接、查找、替换等,而QByteArray需要先转换成QString才能进行字符串操作。 3. QString的内存占用较大,因为它是Unicode字符串,而QByteArray的内存占用较小,因为它是字节串。 4. 在网络传输和文件读写等场景中,QByteArray更常用,因为它可以直接进行二进制数据的读写和传输,而QString需要先进行编码和解码。 总之,QString适用于多语言、字符串操作等场景,而QByteArray适用于二进制数据的读写和传输等场景。 ### 回答2: QStringQByteArray都是Qt中常用的字符串类,它们都可以用来表示字符串,但它们有一些区别QString是基于Unicode的,可以表示全球范围内的所有字符,包括中文、日文、韩文等等,它的内部存储是一个16位的Unicode字符数组,所以一个QString对象可以保存任意长度的字符串。而QByteArray则是基于字节数组的,它的内部存储是一个8位的字符数组,所以它只能保存不含有多字节字符的字符串,如英文和数字等ASCII码字符。 在使用两者时需要注意的还有编码问题。QString中的文本数据使用的是Unicode编码,而QByteArray中的文本数据使用的是本地系统编码,如在Windows下使用的是ANSI编码,在Linux下使用的是UTF-8编码。在进行文本转换时需要使用一些Qt提供的函数来解决编码转换的问题。 除了以上的区别QStringQByteArray在使用上还是有一些相似之处的,比如它们都提供了一些常用的函数,如字符串比较、查找、替换等。但是需要注意的是,在进行字符串比较时,由于QString使用的是Unicode编码,所以它的比较结果可能与QByteArray不同。这个问题需要在具体的应用场景中具体分析,选择合适的字符串类进行使用。 ### 回答3: QStringQByteArray是QT中常用的两种字符串,它们同时也是QT字符串的两种存储方式。QString专门用于处理Unicode字符串,而QByteArray主要用于处理字节流。 1. 字符编码方式不同 QString是使用的Unicode编码,也就是说能够处理所有的字符,比如中文、韩文等,而QByteArray则是使用的ASCII编码方式,操作的是字节流。 2. 存储方式不同 QString采用的是动态存储,即可以根据实际的字符串长度进行存储,而QByteArray则是静态的存储方式,需要预先设定最大存储长度。 3. 字符串操作不同 ①QString可以使用append()、prepend()、insert()等函数来进行字符串连接和插入操作; ②QByteArray则提供了多种关于字节的操作函数,如append()、prepend()、insert()、replace()等,可以操作字节流。 4. 适用场合不同 QString适用于需要处理Unicode编码的字符串,如显示界面、字符串的简单处理等。 QByteArray适用于需要处理二进制数据、协议或者网络通信、文件读写等场合。 综上,两者是不同存储字符的方法,QByteArray不关心字符集,而QString主要是用于Unicode字符的存储。在使用时应根据具体的场景选择适合的字符串类型,才能使编码更加规范和高效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值