Qt中QString,int,char,QByteArray之间相互转换
int 转 QString
int m=1;
QString b;
b=QString::number(m)
QString 转int
QString a="1111"
int b;
b=a.toInt()
char 转换为 QString
char a='b';
QString str;
str=QString(a);
QString 转换为 char
QString str="qq";
char *ch;
ch = str.toLatin1.data();
1.QString转char
*
先将QString转换为QByteArray,再将QByteArray转换为char
*。
注意:不能用下面的转换形式char *mm = str.toLatin1().data();。因为这样的话,str.toLatin1()得到的QByteArray类型结果就不能保存,最后转换,mm的值就为空。
2. char * 转QString
可以使用QString的构造函数进行转换:QString(const
QLatin1String &str);
QLatin1String的构造函数:QLatin1String(const char *str);
则如下语句是将char * mm转换为QString
str:
str = QString(QLatin1String(mm));
char * 与 const char *的转换
char *ch1="tt";
const char *ch2="qq";
ch2 = ch1;//不报错,但有警告
ch1 = (char *)ch2;
QByteArray 转换为 char *
char *ch;//不要定义成ch[n];
QByteArray byte;
ch = byte.data();
char * 转换为 QByteArray
char *ch;
QByteArray byte;
byte = QByteArray(ch);
QString 转换为 QByteArray
QByteArray byte;
QString string;
byte = string.toAscii();
QString s("hello");
QByteArray cstr = s.toAscii();
QString s("hello");
QByteArray cstr = s.toLatin1();
QByteArray 转换为 QString
QByteArray byte;
QString string;
string = QString(byte);
示例:
qDebug()<<"qq";
qDebug()<<tr("tt");
qDebug()<<ch;(ch 为char类型)
qDebug()<<tr(ch);
qDebug()<<byteArray;(byteArray是QByteArray类型)
qDebug()<<tr(byteArray);
qDebug()<<str;(str 为Qstring类型)
但是qDebug()<<tr(str);是不可以的,要想用tr()函数输出QString类型的字符则要如下:
qDebug()<<tr(str.toLatin1);
QString 转换为 string
QString s2q(const string &s)
{
return QString(QString::fromLocal8Bit(s.c_str()));
}
string q2s(const QString &s)
{
return string((const char *)s.toLocal8Bit());
}
1. 将QString类型转化为float类型,很简单
QString data;
float num = data.toFloat();
即可很轻松的实现。
2. 但是如何将float类型转化为QString类型呢?
查看API很难发现封装好的转化函数
可以尝试使用下面的代码转化:
float num = 1.222;
QString data = QString("float is %1").arg(num);
输出结果是:float is 1.222
如果只要float转化成的数值,则使用如下:
QString data = QString("%1").arg(num);
Hex转QString
方法一:
QString key;
key = QString("%1").arg(k,4,16,QLatin1Char('0'));//k为int型或char型都可
方法二:
char chBuf[20];
sprintf(chBuf,"%02x",k);
key = QString::fromUtf8(chBuf);
或 key = QString(QLatin1String(chBuf));
不用补0将10进制转成16进制字符串
key = QString::number(k, 16);
Qstring 转换char*问题
QString qstr("hello,word");
const char * p = qstr.toLocal8Bit().data();
const char *p = qstr.toStdString().data();
QString 转 Hex
char ConvertHexChar(char ch)
{
if((ch >= '0') && (ch <= '9'))
return ch-0x30;
else if((ch >= 'A') && (ch <= 'F'))
return ch-'A'+10;
else if((ch >= 'a') && (ch <= 'f'))
return ch-'a'+10;
else return (-1);
}
void String2Hex(QString str, QByteArray &senddata)
{
int hexdata,lowhexdata;
int hexdatalen = 0;
int len = str.length();
senddata.resize(len/2);
char lstr,hstr;
for(int i=0; i<len; )
{
//char lstr,
hstr=str[i].toLatin1();
i++;
if(hstr == ' ')
{
continue;
}
if(i > len)
break;
lstr = str[i].toLatin1();
hexdata = ConvertHexChar(hstr);
lowhexdata = ConvertHexChar(lstr);
if((hexdata == 16) || (lowhexdata == 16))
break;
else if(lowhexdata == -1)
hexdata = hexdata;
else
hexdata = hexdata*16+lowhexdata;
i++;
senddata[hexdatalen] = (char)hexdata;
hexdatalen++;
}
senddata.resize(hexdatalen);
}