QString与QByteArray,Char*相互转换

1. QByteArray 与 QString 的相互转化

//QByteArray  转 QString
QByteArray byte = "hello";
QString str = QString(byte);  //直接使用QString构造

//QString 转 QByteArray
QString str = "hello";
QByteArray byte = str.toLatin1();
QByteArray byte = toLocal8Bit();
QByteArray byte = toUtf8();

2.QByteArray 与 char * 的相互转化

//QByteArray 转化为 char * 
QByteArray ba("Hello world");
char *ch = ba.data();  //ch是指针
qDebug() << *ch;  //*ch指向字符'H',输出:H
qDebug() << ch;  //输出:Hello world

//char * 转化为 QByteArray
char *ch = "Hello world";
QByteArray ba = QByteArray(ch);  //直接使用QByteArray()构造
qDebug() << ba;  //输出:"Hello world"
qDebug().noquote() << ba;  //去除字符串的双引号打印,输出:Hello world

3.QString 与 char * 的相互转化

//QString 转化为 char *
//先转化为 QByteArray,再转化为 char *
QString str("Hello world");
QByteArray ba = str.toLatin1();//must
char* ch = ba.data();
qDebug() << ch;  //输出:Hello world


//先转为标准库中的 string 类型,再转化为 char *
QString str("Hello world");
std::string s = str.toStdString();
const char* ch = s.c_str();
qDebug() << ch;  //输出:Hello world


//char * 转化为 QString
char *ch = "Hello world";
QString str(ch);  //直接使用QString()构造
qDebug() << str;  //输出:"Hello world"

这样就完成了 QString 向 char * 的转化。注意第2行,不可以 str.toLatin1().data() 这样一步完成,否则可能会出错。

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

添加GBK编码支持:

#include <QTextCodec>

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

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

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

参考文章原文链接1

参考文章原文链接2

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值