QString和QByteArray

QString有一个未标记为explicit的构造函数QString(const QByteArray &ba),导致许多形参为QString的函数可以接受类型为QByteArray的实参,时间久了会会以为这两个类可以随意混用,但实际并不是这样,这两个类适用的场景还是有区别的。

QString相较QByteArray更高级更抽象,QByteArray则更底层更具体。QString基本单位是一个个的Unicode字符(QChar),它不提供char *data()这样可以访问其具体储存内容的接口,只提供了QChar *data()接口。QByteArray的基本单位是一个个的字节,可视作char *的替代品,提供了char *data()用来访问其存储的字节。

大家都知道,同样的字符使用不同的编码保存在磁盘上时,其数据可能会不同。相应的,QString提供了QByteArray toUtf8() constQByteArray toLatin1() const这样的接口对字符进行编码,以及QString fromUtf8(const QByteArray &str)QString fromLatin1(const QByteArray &str)这样的接口对字节进行解码。

QByteArray类便于对数据进行存储和传输,在这样的场景时使用QByteArray类比较合适。而对于其他场景,则是QString比较合适。举一个例子,QJsonDocument是一个用于保存Json对象的类,它提供了QByteArray toJson() constQJsonDocument fromJson(const QByteArray &json, QJsonParseError *error = nullptr)接口,而没有提供QString版本的接口,在我看来就是因为Json主要用于数据的传输和存储。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章