Qt中QString,int,char,QByteArray之间相互转换

QT 专栏收录该内容
4 篇文章 0 订阅
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.QStringchar *
先将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);
}
  • 2
    点赞
  • 0
    评论
  • 3
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

打赏
文章很值,打赏犒劳作者一下
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页

打赏

左氏浮夸

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值