文档章节

QString与char *的相互转换

TemetNosce
 TemetNosce
发布于 2017/04/01 11:28
字数 319
阅读 37
收藏 0

##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

© 著作权归作者所有

共有 人打赏支持
TemetNosce
粉丝 1
博文 48
码字总数 24514
作品 0
成都
程序员
私信 提问
Qt之QTextCodec乱谈

何处开始呢? 一旦在Qt程序中出现latin1字符集以外的字符,几乎大家无一例外的会用到 QTextCodec。 而不少网友不分青红皂白,一旦用到中文,就同时使用下面3条指令(其中textc 取为 gb18030 ...

晨曦之光
2012/05/08
794
0
Qt下 QString转char*

Qt下面,字符串都用QString,确实给开发者提供了方便,想想VC里面定义的各种变量类型,而且函数参数类型五花八门,经常需要今年新那个类型转换 Qt再使用第三方开源库时,由于库的类型基本上都...

kartik
2014/07/25
0
0
unsigned char qstring,转换

【转帖请注明出处:blog.csdn.net/lanmanck】 一般人搜索unsigned char qstring都是希望知道unsigned char 是如何转换成qstring的。 例如,我从串口接收到0x2,0x56,0xff这些数,我要把它显...

长平狐
2012/06/12
476
0
QT_NO_CAST_FROM_ASCII 副作用一则(QTBUG20821)

问题 QTBUG 20821描述这样一个问题: 很简单的一个程序,编译运行,得到结果: 但是,如果在.pro文件内添加了 DEFINES += QT_NO_CAST_FROM_ASCII 之后,编译运行,"没有任何警告或错误",但结...

晨曦之光
2012/05/08
98
0
QString

今天要说的是QString。之所以把QString单独拿出来,是因为string是很常用的一个数据结构,甚至在很多语言中,比如JavaScript,都是把string作为一种同int等一样的基本数据结构来实现的。 每一...

晨曦之光
2012/04/13
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

想问一下C++里queue要怎么遍历

如题,想知道怎么遍历<queue>对象的元素? 貌似不能遍历。要么全部pop push一遍,要么换个容器呗。 queue是先进后出的数据类型,只能不断读top()然后再pop()掉。故意把遍历操作隐藏掉了,...

shzwork
昨天
2
0
Ubuntu 18.04.2 LTS nvidia-docker2 : 依赖: docker-ce (= 5:18.09.0~3-0~ubuntu-bionic)

平台:Ubuntu 18.04.2 LTS nvidia-docker2 版本:2.0.3 错误描述:在安装nvidia-docker2的时候报dpkg依赖错误 nvidia-docker2 : 依赖: docker-ce (= 5:18.09.0~3-0~ubuntu-bionic) 先看一下依......

Pulsar-V
昨天
3
0
学习笔记1-goland结构体(struct)

写在前面:若有侵权,请发邮件by.su@qq.com告知。 转载者告知:如果本文被转载,但凡涉及到侵权相关事宜,转载者需负责。请知悉! 本文永久更新地址:https://my.oschina.net/bysu/blog/3036...

不最醉不龟归
昨天
4
0
【转】go get命令使用socket代理

由于某些不可描述的原因,国内使用go get命令安装某些包的时候会超时导致失败,比如net包、sys包、tools包等。第一种解决办法就是自己从git上下载后添加链接到GOPATH中,比如: 1234...

yiduwangkai
昨天
6
0
从上往下打印出二叉树的每个节点,同层节点从左至右打印。

//第一种做法 public class Solution { public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { ArrayList <Integer> li=new ArrayList<Integer>(); ArrayList <TreeN......

南桥北木
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部