QString 和 char* 之间的转换(以及QByteArray)

这篇博客详细介绍了如何在C++中进行QString与char*之间的转换,包括QString转char *的两种方法,以及char *转QString的四种方法。特别提到了在处理中文字符时的注意事项和使用QByteArray的解决方案。提供了实际操作的例子帮助理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.QString转char *

       方法1:

先将QString转换为QByteArray,再将QByteArray转换为char *。

注意:不能用下面的转换形式char *mm = str.toLatin1().data();。因为这样的话,str.toLatin1()得到的QByteArray类型结果就不能保存,最后转换,mm的值就为空。

    QString str = “hello”; //QString转char *  
    QByteArray ba = str.toLatin1();  
    char *mm = ba.data();

补充:以上方法当QString里不含中文时,没有问题,但是QString内含有中文时,转换为char*就是乱码,采用如下方法解决:

添加GBK编码支持,使用函数toLocal8Bit ( ),

#include <QTextCodec>
//QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));
//QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
//然后改变上面的第2行为:
QByteArray ba = str.toLocal8Bit();

       方法2:

先将QString转为标准库中的string类型(StdString),然后将string转为char*,如下:

std::string str = filename.toStdString();
const char* ch = str.c_str();

此方法不支持中文!

2. char * 转QString

       方法1:

QString(const char *ch);

       方法2:

QString::fromLocal8Bit(chr, sizeof(chr));
QString::fromLatin1(   chr, sizeof(chr));

      方法3:

可以使用QString的构造函数进行转换:
QString(const QLatin1String &str);
QLatin1String的构造函数:
QLatin1String(const char *str);
则如下语句是将char * mm转换为QString str:
QString str = QString(QLatin1String(mm));

方法4:

转为QByteArray,再转QString.

3.QByteArray

char* 转 QByteArray:
QByteArray ba(chr, sizeof(chr));

4.例子:

//#include "myclass.h"  
#include <QtGui/QApplication>  
#include <QtDebug>  
#include <QString>  
  
int main(int argc, char *argv[])  
{  
    QApplication a(argc, argv);  
  
    QString str = “hello”; //QString转char *  
    QByteArray ba = str.toLatin1();  
    char *mm = ba.data();  
    qDebug()<<mm<<endl;  //调试时,在console中输出  
  
    QString nn = QString(QLatin1String(mm)); //char *转QString  
    qDebug()<<nn<<endl;  //调试时,在console中输出  
  
    //MyClass w;  
    //w.show();  
    return a.exec();  
}
/*******************************************
QString和QByteArray提供了非常便利的operator+,以允许你写这样的代码:
QString directory = /*...*/, name = /*...*/;
QString dataFile = directory + QLatin1Char('/') + name + QLatin1String(".dat");
**********************************************/











                
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值