##QString 转换为 char * 将 QString 转 char *,需要用到 QByteArray 类,QByteArray 类的说明详见 Qt 帮助文档。 因为 char * 最后都有一个'\0'作为结束符,而采用 QString::toLatin1() 时会在字符串后面加上'\0'。 方法如下:
QString str;
char* ch;
QByteArray ba = str.toLatin1(); // must
ch=ba.data();
注意:
- 1 不能用下面的转换形式char *mm = str.toLatin1().data();。因为这样的话,str.toLatin1()得到的QByteArray类型结果就不能保存,会出现bug。
- 2 以上方法当 QString 里不含中文时,没有问题,但是 QString 内含有中文时,转换为 char * 就是乱码.
##char * 转换为 QString 将 char * 转换为 QString 比较容易操作,我们可以使用 QString 的构造函数进行转换:
可以使用QString的构造函数进行转换:QString(const QLatin1String &str);
QLatin1String的构造函数:QLatin1String(const char *str);
则如下语句是将char * mm转换为QString str:
str = QString(QLatin1String(mm));
##例子:
view plain
//#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();
}
进行调试,在console处输出如下内容:
hello
hello