小工具知识网

当前位置: 首页 > 行业知识 > QT中QString 转换为 char *的几种方法

行业知识

QT中QString 转换为 char *的几种方法

2026-11-02 01:53:31 来源:互联网转载

1 Qstring str;

2 char* ch;

3 QByteArray ba = str.toLatin1();

4 ch=ba.data();

注意:一定要加上,不可以str.toLatin1().data()这样一部完成,可能会出错。

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

方法1:

添加GBK编码支持:

1 #include

2 QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));

3 QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));

然后改变上面的第三行为:QByteArray ba = str.toLoacl8Bit(); toLoacl8Bit支持中文

方法2:

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

1 QString qstr;

2 std::string str = qstr.toStdString();//QString转换为string

3 const char* ch = str.c_str();

注意:c_str函数的返回值是const char*的,不能直接赋值给char*

2)把char*转换为QString。

最为方便的做法是以一个QLatin1String对象作为参数,来调用QString的构造函数。

示例:

1 const char *cstr;

2 QString qstr= QString(QLatin1String(cstr));

(3)把string转换为QString.

1 std::string str="hello";

2 QString qstr = QString(QString::fromLocal8Bit(str.c_str()));//string向QString转换

(4)int(float)型转化为QString型

方法一:

1 long a = 63;

2 QString s = QString::number(a, 10); // s == "63"

3 QString t = QString::number(a, 16).toUpper(); // t == "3F"

(解释,变量a为int型或者float,double。10和16为进制) toUpper是大写

方法二:

1 long a = 63;

2 QString s = QString("%1").arg(a);

 

1.QString 转换为 char *

将 QString 转 char *,需要用到 QByteArray 类,QByteArray 类的说明详见 Qt 帮助文档。

因为 char * 最后都有一个'\0'作为结束符,而采用 QString::toLatin1() 时会在字符串后面加上'\0'。

QString  str;

char*  ch;

QByteArray ba = str.toLatin1(); // must

ch=ba.data();

这样就完成了 QString 向 char * 的转化。经测试程序运行时不会出现 bug。注意第3行,一定要加上,不可以 str.toLatin1().data() 这样一步完成,否则可能会出错。

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

方法1:添加GBK支持

#include

QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));

QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));

然后将上面的第3行修改为:

QByteArray ba = str.toLocal8Bit();  // toLocal8Bit 支持中文

方法2:先将 QString 转为标准库中的 string 类型,然后将 string 转为 char *。如下:

QString  filename;

std::string str = filename.toStdString();

const char* ch = str.c_str();

2.char * 转换为 QString

将 char * 转换为 QString 比较容易操作,我们可以使用 QString 的构造函数进行转换:

QString(const QLatin1String &str);

QLatin1String 的构造函数:

QLatin1String(const char *str);

因此用下面这个语句就可以将 char * ch 转换为 QString str 了,如下:

str = QString(QLatin1String(ch));

char * 与 const char *的转换

char *ch1="hello11";

const char *ch2="hello22";

ch2 = ch1;//不报错,但有警告

ch1 = (char *)ch2;

char 与 QString的转换

char 转换为 QString 

其实方法有很多中,我用的是:

char a='b';

QString str;

str=QString(a);

QString 转换为 char 

方法也有很多种

QString str="abc";

char *ch;

QByteArray ba = str.toLatin1()

ch = ba.data();

注意:在调用QByteArray.data()之前,必须要先显示储存这个bytearray。像这样const char *ch = str.toLatin1().data();会使程序崩溃,因为QByteArray没有被储存,调用data()前是不存在的,必须先显式调用一次toLatin1(),再调用data()。

QByteArray 与 char* 的转换

QByteArray 转换为 char *

char *ch;//不要定义成ch[n];

QByteArray byte;

ch = byte.data();

char * 转换为 QByteArray

char *ch;

QByteArray byte;

byte = QByteArray(ch);

QString 与 QByteArray 的转换

QString转换为QByteArray

QByteArray byte;

QString string;

byte = string.toAscii();

QByteArray 转换为 QString

QByteArray byte;

QString string;

string = QString(byte);

这里再对这俩中类型的输出总结一下:

qDebug()

上一篇:揭秘必备工具,轻松提取网页视频秘籍!

下一篇:线代:认识行列式、矩阵和向量