QT中QByteArray转化成qsring为什么是乱码

作者&投稿:蓝陆 (若有异议请与网页底部的电邮联系)
qt中怎么把qbytearray转化为qstring?~

// QString(const QByteArray &ba) QString的构造函数默认就可以转换;
QByteArray baData;
QString str = QString(baData);
// 反过来转换;
QByteArray by1 = str.toLatin1();
QByteArray by2 = str.toLocal8Bit();一. 基本概念
Qt是一个1991年由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(Meta Object Compiler, moc))以及一些宏,易于扩展,允许组件编程。
Qt是1991年奇趣科技开发的一个跨平台的C++图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所有功能。
二. 平台支持
1.MS/Windows - 95、98、NT4.0、ME、2000、XP 、 Vista、Win7、win8、win2008;
2.Unix/X11 -Linux、SunSolaris、HP-UX、CompaqTru64 UNIX、IBMAIX、SGI IRIX、FreeBSD、BSD/OS和其它很多X11平台;
3.Macintosh -Mac OS X;
4.Embedded - 有帧缓冲(framebuffer)支持的嵌入式Linux平台,Windows CE;
5.Symbian Symbian^3 Symbian Anna Symbian Belle。

Qt下面,字符串都用QString,确实给开发者提供了方便,想想VC里面定义的各种变量类型,而且函数参数类型五花八门,经常需要今年新那个类型转换
Qt再使用第三方开源库时,由于库的类型基本上都是标准的类型,字符串遇的多的就是Char*类型
在Qt下怎样将QString转char*呢,需要用到QByteArray类,QByteArray类的说明详见Qt帮助文档。
因为char*最后都有一个‘/0’作为结束符,而采用QString::toLatin1()时会在字符串后面加上‘/0’
方法如下:
Qstring str;
char* ch;
QByteArray ba = str.toLatin1();
ch=ba.data();
这样就完成了QString向char*的转化。经测试程序运行时不会出现bug
注意第三行,一定要加上,不可以str.toLatin1().data()这样一部完成,可能会出错。

补充:以上方法当QString里不含中文时,没有问题,但是QString内含有中文时,转换为char*就是乱码,采用如下方法解决:
方法1:
添加GBK编码支持:
#include
QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
然后改变上面的第三行为:QByteArray ba = str.toLoacl8Bit(); toLoacl8Bit支持中文
方法2:
先将QString转为标准库中的string类型,然后将string转为char*,如下:
std::string str = filename.toStdString();
const char* ch = str.c_str();

是不是在转换时把QByteArray的编码格式给弄错了,你首先得知道你的字节码采用的编码格式,然后才能选择合适的解码函数,才能够正确的解码,否则肯定是乱码了


寻911的一首歌should've been the one,如有符合答案,追加200分,这首歌...
911 should've been the one ~~下载:http:\/\/upload1.lonelylive.cn\/BzJVNAc1XDwHN1Q1VGxXNFN6W1hWbFBuUzRVdgAoVUEEbQYwVDoKO1IhVmgFIFdFAjYFOwMyAA8CRVV3UzsHIwdwVSsHPFw1BzZULVQTV2hTcFtiVm1QZ1N2VTcAN1VLBG0GeFQFCjpSPVZ1BWNXYwJwBSMDMwB1AjBVNVMWBzMHZVVqByBcNgc3VFZUNldiUyNbOVYzUE9TPVVg...

广东省18996798647: QT 将QByteArray转换成QVector -
蓟影萘普: 可以借助QString的分隔函数split QByteArray chars("100.1 200.2 300.3"); // 这里以空格分隔数字为例 QString str(chars); QStringList str_list = str.split(" "); // 以空格为分隔符(可以换成其它分隔符) QVector<double> nums; bool ok; for(int i=0; i<str_list.size(); i++) nums.append(str_list[i].toDouble(&ok));

广东省18996798647: qt中怎么把qbytearray转化为qstring? -
蓟影萘普: // QString(const QByteArray &ba) QString的构造函数默认就可以转换;QByteArray baData; QString str = QString(baData);// 反过来转换;QByteArray by1 = str.toLatin1(); QByteArray by2 = str.toLocal8Bit(); 一. 基本概念 Qt是一个1991年由奇...

广东省18996798647: 怎么将qbytearray转换为quint -
蓟影萘普: 我自己在编程中遇到的一些数据转换,以后会慢慢积累的. QString data="1234"; quint16 port; port=quint(data.toUint());QString data="helloworld!"; QByteArray prodata; prodata.append(data);

广东省18996798647: qt 下怎么把Qstringlist 转化为Qbytearray 类型? -
蓟影萘普: // qstring(const qbytearray &ba) qstring的构造函数默认就可以转换 qbytearray badata; qstring str = qstring(badata); // 反过来转换 qbytearray by1 = str.tolatin1(); qbytearray by2 = str.tolocal8bit();

广东省18996798647: 新人求助,QString如何转换为char数组 -
蓟影萘普: 先将QString转换为QByteArray,再将QByteArray转换为char *view plain //#include "teclass.h" #include <QtGui/QApplication> #include <QtDebug> #include <QString>int main(int argc, char *argv[]) {QApplication a(argc, argv); QString str = ...

广东省18996798647: Qt中串口获取的字符为QByteArray型(如0026),如何转化为十进制?
蓟影萘普: 就一个数字的话,直接调用QByteArray::toInt()一类的就可以了: double toDouble ( bool * ok = 0 ) const float toFloat ( bool * ok = 0 ) const QByteArray toHex () const int toInt ( bool * ok = 0, int base = 10 ) const long toLong ( bool * ok = 0, int base = 10 ) const qlonglong toLongLong ( bool * ok = 0, int base = 10 ) const

广东省18996798647: QT Qstring怎么转化成char[],不是char* -
蓟影萘普: 这两个类型绝大多数时候是等同的,并且c++不能支持返回数组,它只能返回char *.放心,可以和数组一样的用.

广东省18996798647: 请教Qt如何解析出Json的数据 -
蓟影萘普: JSON(JavaScript Object Notation)是一种轻量级的数据交换格式.它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C+...

广东省18996798647: QT如何将串口读取的temp中的数据赋值给一个字符数组distance[] -
蓟影萘普: QByteArray 转换为 char *char *ch;//不要定义成ch[n];QByteArray byte;ch = byte.data();

广东省18996798647: PyQt的QString和python的string的区别 -
蓟影萘普: 通常两者会自动转换,不过在有些情形下,在pyqt里,你需要将python的string转过去.python的string对象是继承了PyObject而qyqt的QString是继承了QObject.所需要需要转换.pyqt的其它的数据也是一样,自己注意一下.python通常是变量类型自动转换的.只是pyqt不成.一定要显式的转换.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网