数据之间的转换

1、QString转const char*

 1.1//不带中文

 QString str1 = "Test";
 QByteArray ba = str1.toLatin1();
 const char *c_str2 = ba.data();
 printf("str2: %s", c_str2);

1.2//带中文,第五一样

char a[20];

QString str = “你好”;

QByteArray ba = str .toLocal8Bit();//线路

memcpy(a, ba.data(), ba.size());

2、unsigned char* 转char*

unsigned char* p;

char *q=(unsigned char*)p

3、QByteArray ba{0x00,0x01,0x02},打印出“000102”

QString str = ba.toHex();

4、char data[4] = {0x01,0x02,0x03,0x04},打印出“01020304”

QByteArray ba(data,4);

QString str = ba.toHex();

5、中文字符串转char

QString str = “你好”;

QByteArray ba = str.toLocal8Bit();

char* dataChar;

dataChar = ba.data();

6、带有中文的char*或者QByteArray转QString

6.1

QByteArray ba = "你好";

QString str = QString::fromLocal8Bit(ba);

ps:QByteArray::resize为0之后,不会影响后续初始化,如下程序能正常打印字符串。

QByteArray ba;

ba.resize(0);

ba[0]=0x54;

ba[1]=0x65;

ba[2]=0x73;

ba[3]=0x74;

ba[4]=0x21;

qDebug()<<ba;

6.2

char ch[4];

ch[0] = 0xC4;

ch[1] = 0xE3;

ch[2] = 0xBA;

ch[3] = 0xC3;

QByteArray ba;ba.resize(4);//一定要这个resize

memcpy(ba.data(),ch,4);

QString str = QString::fromLocal8Bit(ba);

qDebug()<<str;//你好

6.3

#include <QTextCodec>

QTextCodec::codecForName("GBK")->toUnicode(ba);

7、有0x00的char*转QString

info[3]={0x01,0x00,0x02};

QString tempStr="";int j=0;

for(int i=0;i<3;i++)

{

tempStr += QString("%1 ").arg(info[j++]&0xFF,2,16,QLatin1Char('0'));//如果不与上0xFF,结果会出问题

}

return tempStr.toUpper();

8、QString str=“54 65 73 74 21” 转 QByteArray ba ={0x54,0x65....}

1、QByteArray ba1 = str.toLatin1();或者QByteArray ba1 = str.toUtf8();

2、QByteArray ba2 = QByteArray::fromHex(ba1);

ps:即使str里面有“00”依旧可以转换

 9、QString转char*

str.toStdString().c_str;

10、十六进制QString转float或者double

 11、QString保留小数

QString::number(100.1002121323,'f',6) ;

posted @ 2017-04-19 16:04  朱小勇  阅读(608)  评论(0编辑  收藏  举报