QString和QByteArray的定义与转换

QString

Qt的QString类提供了很方便的对字符串操作的接口

//QString::arg()用法
QString str = QString("%1 %2 %3").arg(1).arg(2.0).arg("hello");

​ %1, %2, %3作为占位符,将被后面的arg()函数中的内容依次替换,比如%1将被替换成1,%2将被替换成2.0,%3将被替换成"hello"。

1 2 hello

QByteArray

Qt的QByteArray类提供了很方便的对字节流操作的接口

QString与QByteArray的区别

QString是专门用来处理字符串的,除了能处理ASCII编码字符,还包括各国语言的编码,默认情况下QString会把所有数据当做utf-8编码来存储和处理。

QByteArray只是单纯用来处理数据的,只能处理ASCII编码字符,其它复杂的编码(比如utf-8编码),直接以字节流的方式来对待。

QString str("小马哥");
QByteArray byte("小马哥");
qDebug() << "str:" << str << "byte:" << byte << endl;
​输出结果:str: "小马哥" byte: "\xE5\xB0\x8F\xE9\xA9\xAC\xE5\x93\xA5"

str保留编码格式,能输出中文
但是QByteArray只把"小马哥"当做普通的字节数据来处理
utf-8编码下,一个汉字占三个字节

QString转QByteArray

QString str("123abc小马哥");
QByteArray byte1 = str.toLatin1(); //按照ASCII编码转换,无法转换中文
QByteArray byte2 = str.toUtf8();  //按照Utf-8编码转换,可以转换中文
qDebug() <<  "byte1:" << byte1 << "byte2:" << byte2;

输出结果:

byte1: "123abc???" 
byte2: "123abc\xE5\xB0\x8F\xE9\xA9\xAC\xE5\x93\xA5"

QByteArray转QString

QByteArray byte("123abc小马哥");
QString str(byte);//QString str = byte;
qDebug() << "byte:" << byte << "str:" << str;

输出结果:

byte: "123abc\xE5\xB0\x8F\xE9\xA9\xAC\xE5\x93\xA5" 
str: "123abc小马哥"

QString与vector转换

vector数组(把值赋)给字符串

double可以直接给utf-8

//直接转
QString value_i;
    for (int i = 0; i < pso->g_best.size(); ++i){
    
    
    value_i.append(QString("%1").arg(pso->g_best.at(i))).append(QString("\n"));}

字符串(把值赋)给vector数组

utf-8需要转换为double

//toDouble()
while (!file.atEnd()){
    
    
   QString line = file.readLine().trimmed();
   one_array.push_back(line.toDouble());
}

猜你喜欢

转载自blog.csdn.net/qq_43641765/article/details/112619185