本文主要是介绍QString与QByteArray,Char*相互转换,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1. QByteArray 与 QString 的相互转化
//QByteArray 转 QString
QByteArray byte = "hello";
QString str = QString(byte); //直接使用QString构造//QString 转 QByteArray
QString str = "hello";
QByteArray byte = str.toLatin1();
QByteArray byte = toLocal8Bit();
QByteArray byte = toUtf8();
2.QByteArray 与 char * 的相互转化
//QByteArray 转化为 char *
QByteArray ba("Hello world");
char *ch = ba.data(); //ch是指针
qDebug() << *ch; //*ch指向字符'H',输出:H
qDebug() << ch; //输出:Hello world//char * 转化为 QByteArray
char *ch = "Hello world";
QByteArray ba = QByteArray(ch); //直接使用QByteArray()构造
qDebug() << ba; //输出:"Hello world"
qDebug().noquote() << ba; //去除字符串的双引号打印,输出:Hello world
3.QString 与 char * 的相互转化
//QString 转化为 char *
//先转化为 QByteArray,再转化为 char *
QString str("Hello world");
QByteArray ba = str.toLatin1();//must
char* ch = ba.data();
qDebug() << ch; //输出:Hello world//先转为标准库中的 string 类型,再转化为 char *
QString str("Hello world");
std::string s = str.toStdString();
const char* ch = s.c_str();
qDebug() << ch; //输出:Hello world//char * 转化为 QString
char *ch = "Hello world";
QString str(ch); //直接使用QString()构造
qDebug() << str; //输出:"Hello world"
这样就完成了 QString 向 char * 的转化。注意第2行,不可以 str.toLatin1().data() 这样一步完成,否则可能会出错。
补充:以上方法当 QString 里不含中文时,没有问题,但是 QString 内含有中文时,转换为 char * 就是乱码,采用如下方法解决:
添加GBK编码支持:#include <QTextCodec>QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));然后将上面的第3行修改为:QByteArray ba = str.toLocal8Bit(); // toLocal8Bit 支持中文
参考文章原文链接1
参考文章原文链接2
这篇关于QString与QByteArray,Char*相互转换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!