QString与char *的相互转换

QString与char *的相互转换在进行编程时,我们经常需要用到字符串这种类型,毫无疑问,Qt库中也对字符串类型进行了封装,QString类提供了你能想到的所有字符串操作方法,给开发者带来了极大方便。  但是我们在编写程序时,不可避免地会在Qt框架上使用第三方的开源库,由于库的类型基本上都是标准的类型,即使用char*来表示字符串类型。那么问题来了,QString和char*之间如何进行转换呢?  下面分两

大家好,又见面了,我是你们的朋友全栈君。

在进行编程时,我们经常需要用到字符串这种类型,毫无疑问,Qt 库中也对字符串类型进行了封装,QString 类提供了你能想到的所有字符串操作方法,给开发者带来了极大方便。

但是我们在编写程序时,不可避免地会在 Qt 框架上使用第三方的开源库,由于库的类型基本上都是标准的类型,即使用 char * 来表示字符串类型。那么问题来了,QString 和 char * 之间如何进行转换呢?

下面分两种情况进行说明。

一、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>

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();

二、 char * 转换为 QString

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

QString(const QLatin1String &str);

QLatin1String 的构造函数:

QLatin1String(const char *str);

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

str = QString(QLatin1String(ch));
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/144846.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 一文读懂微生物扩增子16s测序[通俗易懂]

    一文读懂微生物扩增子16s测序[通俗易懂]微生物多样性测序结果如何看?做过16s测序的小伙伴们都知道测完之后会拿到一份结果报告但这并不代表可以开始写文章了看似一大堆数据图表却不知如何下手这是很多人头疼的地方那么怎样给报告中的数据赋予灵魂让它真正成为对你有帮助的分析呢?一文扫除困惑首先什么是16SrRNA?16SrRNA基因是编码原核生物核糖体小亚基的基因,长度约为1…

    2022年6月8日
    51
  • arcgis10.2许可服务器无法启动_gis连接到数据库失败

    arcgis10.2许可服务器无法启动_gis连接到数据库失败记录一次eruka注册中心访问有时404,但是接口路径存在的问题一.事件发生背景二.问题发生原因三.解决办法一.事件发生背景微服务架构,多人共同在自己本地开发同一个微服务,但是注册中心只有一个二.问题发生原因多人在自己本地起项目,注册到了同一个注册中心,且注册的服务名字都一样,因此当请求到达eruka注册中心时,会轮训或随机访问存活的节点,当请求访问到其他人的微服务时,就404了,请求访问到自己的微服务,就正常了(开发的时候,一个application对应了多个服务)三.解决办法将自己的微服务

    2022年8月21日
    6
  • 彻底卸载JDK环境教程

    彻底卸载JDK环境教程JDK完全卸载教程卸载JDK删除残留文件清空环境变量清空注册表卸载JDK删除残留文件清空环境变量清空注册表

    2022年6月25日
    48
  • 编译 java_如何编译java[通俗易懂]

    编译 java_如何编译java[通俗易懂]展开全部用命令32313133353236313431303231363533e58685e5aeb931333337613139提示符编译java程序的步骤:1.先新建文本文档,输入自己的java程序。这里我写一个简单的java程序,来做示范。importjava.util.*;publicclassHelloDate{publicstaticvoidmain(String[]ar…

    2022年6月4日
    39
  • 强化学习之DQN算法

    强化学习之DQN算法DQN DeepQNetwork 是强化学习中一种强大的算法 DeepMind 团队凭借该算法 让计算机打败了人类围棋 刷新了人们对人工智能的认知 强烈推荐莫烦大神的强化学习入门课程 本文主要参考莫烦大神的课程进行总结 论文 PlayingAtari https arxiv org abs 1312 5602 参考

    2025年8月18日
    0
  • centos解压命令

    centos解压命令-c:建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的:-z:有gzip属性的-j:有bz2属性的-Z:有compress属性的-v:显示所有过程-O:将文件解开到标准输出参数-f是必须的-f:使用档案名…

    2022年5月16日
    33

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号