Qt中QString与int,char等互转

简述:

QString类提供了丰富的转换函数,可以将一个字符串转换为数值类型或者其他的字符编码集。QString::toInt()函数将字符串转换为整型数值,类似的函数还有toDouble()、toFloat()、toLong()、toLongLong();

1、  int, float , double类型 转换为QString

有两种方法:

A .  使用arg

    long a = 36;  
    QString s = QString("%1").arg(a);   // s == "36"  // int 转 QSting
    QString stepInfo = tr("Time: %1").arg(QString::number(timestamp,10), 8, '0'); //10进制,8位,不足补0

B .  使用QString::number() ;

    long a = 63;  
    QString s = QString::number(a, 10);             // s == "63"  
    QString t = QString::number(a, 16).toUpper();     // t == "3F"  //toUpper: 大写
 
    static QString number(int, int base=10);
    static QString number(uint, int base=10);
    static QString number(long, int base=10);
    static QString number(ulong, int base=10);
    static QString number(qlonglong, int base=10);
    static QString number(qulonglong, int base=10);
    static QString number(double, char f='g', int prec=6);
 
Format Meaning
eformat as [-]9.9e[+|-]999
Eformat as [-]9.9E[+|-]999
f format as [-]9.9
g use e or f format, whichever is the most concise
Guse E or f format, whichever is the most concise

第二参数可省略,省略时为10,表示10进制;

2、 QString 转换为 int类型

基数默认为10,基数须在2到36之间;

    Qstring str="FF";  
    bool ok;  
    int dec=str.toInt(&ok,10); //dec=255 ; ok=true    //QString 转 int
    int hex =str.toInt(&ok,16); //hex=255;ok=true;    //QString 转 int

3、 QString 转换为 double类型

    QString str="123.45";  
    double val=str.toDouble(); //val=123.45  //QString 转 double
    bool ok;  
    double d;  
    d=QString("1234.56e-02").toDouble(&ok); //ok=true;d=12.3456

4、 QString 转换为float 类型

    QString str="123.45";  
    float d=str.toFloat(); //d=123.45  
    QString str="R2D2";  
    bool ok;  
    float d=str.toFloat(&ok); //转换是被时返回0.0,ok=false;  

5、 QString 与 char 互转

1 >  char 转 QString

    char a='b';
    QString str;
    str=QString(a);

2 >  QString 转 char

    QString str="qq";
    char *ch;
    ch = str.toLatin1.data();

6 、 const char * 转 char *

    char *ch1="tt";
    const char *ch2="qq";
    ch1 = (char *)ch2;

7、 char *  与 QByteArray 互转

1 >   QByteArray 转 char *

    //QByteArray--->char *
    char *ch;
    QByteArray byte;
    ch = byte.data();

    //QByteArray---> char []
    QByteArray array(9,'Q');
    char buf[10];//数组
    int len_array = array.size();
    int len_buf = sizeof(buf);
    int len = qMin( len_array, len_buf );
    // 转化
    memcpy( buf, array,  len );

2 > char * 转 QByteArray 

     //char *--->QByteArray
    char *ch;
    QByteArray byte;
    byte = QByteArray(ch);

    //char []--->QByteArray
    char buf[10];
    //给buf赋值
    for (int i = 0; i < 10; i++)
    {
        buf[i] = (i + 1) % 3;//其中存在'\0'元素
    }
    // 转化
    QByteArray array;
    array.resize(sizeof(buf));//重置数据大小
    memcpy(array.data(), buf, sizeof(buf));//copy数据

    // int --->QByteArray
    int  intVar = 199;
    QByteArray array;
    int len_intVar = sizeof(intVar);
    array.resize(len_intVar);
    memcpy(array.data(), &intVar, len_intVar);


    //QByteArray ---> int
    int  outIntVar;
    QByteArray array;
    memcpy(&outIntVar, array.data(), len_intVar);
    //memcpy(&outIntVar, array, len_intVar);//此行代码与上句通用

    // int[] --->QByteArray
    int  intVar[4] = {1,2,9,0};//初始化变量赋值
    QByteArray array;
    int len_intVar = sizeof(intVar);
    array.resize(len_intVar);
    //转换 int[] -> QByteArray
    memcpy(array.data(), &intVar, len_intVar);


    //QByteArray ---> int[]
    QByteArray array;
    int  outIntVar[4];
    memcpy(&outIntVar, array.data(), len_intVar);
    //memcpy(&outIntVar, array, len_intVar);//此行代码与上句通用

    // float --->QByteArray
    float  fVar = 199.0;
    QByteArray array;
    int len_fVar = sizeof(fVar);
    array.resize(len_fVar);
    memcpy(array.data(), &fVar, len_fVar);


    //QByteArray ---> float
    float  outfVar;
    QByteArray array;
    memcpy(&outfVar, array.data(), len_fVar);
    //memcpy(&outfVar, array, len_fVar);//此行代码与上句通用

    QByteArray resData;
    resData.resize(4);
    resData = "1234";
    float fData;
    memcpy(&fData, resData, 4);



    // float[] --->QByteArray
    float  fVar[4] = { 1.1, 2.3, 9.5, 0.2 };//初始化变量赋值
    QByteArray array;
    int len_fVar = sizeof(fVar); // 4*4 = 16 (一个float占4个字节)
    array.resize(len_intVar);
    memcpy(array.data(), &fVar, len_fVar);


    //QByteArray ---> float[]
    float  outFvar[4];
    memcpy(&outFVar, array.data(), len_fVar);
    //memcpy(&outFvar, array, len_fVar);//此行代码与上句通用

8、 QString 转换为char*

QString提供的字符编码集的转换函数将会返回一个constchar*类型版本的QByteArray,即构造函数QByteArray(constchar*)构造的QByteArray对象。QByteArray类具有一个字节数组,它既可以存储原始字节(raw bytes),也可以存储传统的以“\0”结尾的8位的字符串。在Qt中,使用QByteArray比使用const char*更方便,且QByteArray也支持隐式共享。转换函数有以下几种。

toAscii():返回一个ASCII编码的8位字符串。

toLatin1():返回一个Latin-1(ISO8859-1)编码的8位字符串。

toUtf8():返回一个UTF-8编码的8位字符串(UTF-8是ASCII码的超级,它支持整个Unicode字符集)。

toLocal8Bit():返回一个系统本地(locale)编码的8位字符串。

    QString qstr("hello,word");  
    const char * p = qstr.toLocal8Bit().data();
    const char *p2 = qstr.toStdString().data();   

9、 QByteArray  与 QString 互转

1 > QByteArray  转 QString

    QByteArray byte;
    QString string;
    string = QString(byte);
    //或
    string = QString::fromLatin1(byte);
 

2 > QString  转 QByteArray  

    QByteArray byte;
    QString string;
    byte = string.toAscii();
    //or
    byte = string.toLatin1();
 

10、当前时间与QString转换

QDateTime----->QString
QString b_dateTime;
b_dateTime.append(tr("%1").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss")));
QString---->QDateTime
QString strBuffer;
QDateTime time;
strBuffer = "2010-07-02 17:35:00";
time = QDateTime::fromString(strBuffer, "yyyy-MM-dd hh:mm:ss");

11、数值合并

QByteArray 中的两个字节合并成一个低八位一个高八位数据。

方法一:
int QByteArray2int(quint8 highData, quint8 lowData)
{
    return (int)highData * 256 + (int)lowData;
}

QByteArray byte;
QByteArray2int(byte.at(0),byte.at(1));
    QByteArray handle_Data;  
    //  byte0为高8位
    // 取出对应位的16进制char型之后转换为16进制的int型(强制转换)
    int data1= (unsigned char)handle_Data.at(0);  
    //  byte1为低8位
    // 取出对应位的16进制char型之后转换为16进制的int型(强制转换)
    int data2= (unsigned char)handle_Data.at(1);  
    int data_sum= data1<<8|data2;//移位8位是一个字节
    // 将16进制data_sum转换为string类型的10进制数便于在text上显示
    QString  data_string= QString::number(data_sum,10);

12、 QString 与 string 的转换

    QString --> string
    QString.toStdString();
    string --> QString
    QString::fromStdString(string)
  • 23
    点赞
  • 170
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值