关于QT内部16进制、十进制、QByteArray,QString

QT里面的数据转化成十六进制比较麻烦,其他的int或者byte等型都有专门的函数,而十六进制没有特定的函数去转化,这我在具体的项目中已经解决(参考网上大神)->小项目程序

QT里面虽然有什么QString str; str.toInt();等函数,但是用不好的话,会出很大的问题。

QByteArray:这个东西可以存放很多数据,16进制的数据、字符串类的数据等。

 下面这个data接受的是16进制数据,现在想显示出来就得转化成QString,然后再转化成int类型用于计算 

QByteArray data=tcpSocket->readAll(); //接受16进制
QString p = data.toHex(); 2 ui->clearLineEdit->setText(p); //转化成Qstring
data.toInt(0,16) //转化成int

 注意:data.toInt(),直接使用不行!

接下来是接受字符串的转化,

QByteArray data=tcpSocket->readAll();  //接受的是字符串
QString p = QString(data);   //直接转化就行了

最后是十进制转化成十六进制的问题(主要用在串口和TCP上面),下面程序有几种表述:
   

char p[3]={0x11,0xab,0x0b}; 把里面的数据转化成0x11ab0b发送! 
int  p[3] = {170,170,170}; 把里面数据转化成0xaaaaaa发送!

实现的功能都是一样的,第二种简单一点,下面以第二种为例,第一种类似!

QString a1;
    for(int j=0;j<7;j++)
    {
        if(my_class->g_data[j]<16)
        a1+='0'+QString::number(my_class->g_data[j], 16).toUpper();//防止有0x0a,程序会转换成'a',我们要的是转换成'0a'
        else a1+=QString::number(my_class->g_data[j], 16).toUpper();
    }

//将字符型进制转化为16进制
QByteArray MainWindow::QString2Hex(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; )
        {
            hstr=str[i].toLatin1();   //字符型
            if(hstr == ' ')
            {
                i++;
                continue;
            }
            i++;
            if(i >= len)
                break;
            lstr = str[i].toLatin1();
            hexdata = ConvertHexChar(hstr);
            lowhexdata = ConvertHexChar(lstr);
            if((hexdata == 16) || (lowhexdata == 16))
                break;
            else
                hexdata = hexdata*16+lowhexdata;
            i++;
            senddata[hexdatalen] = (char)hexdata;
            hexdatalen++;
        }
        senddata.resize(hexdatalen);
        return senddata;
    }
 //将1-9 a-f字符转化为对应的整数
int MainWindow::ConvertHexChar(char ch)
    {
        if((ch >= '0') && (ch <= '9'))
         return ch-'0';
        else if((ch >= 'A') && (ch <= 'F'))
         return ch-'A'+10;
        else if((ch >= 'a') && (ch <= 'f'))
         return ch-'a'+10;
        else return (-1);
    }

上面的程序就是先转换成16进制的QString,千万别写直接number()没有里面参数的转换!

这是我写TCP发送程序的小小总结,网上哟很多这种资料,但是有很多不适合,总结一下,QT里面的数据转换一定要明确进制和类型,其次是调用函数里面参数写具体!

作者:寂寞的小乞丐
出处:http://www.cnblogs.com/wjy-lulu/
欢迎转载,必须在文章页面明显位置给出原文连接,如需本博文源代码或者有任何问题,请在博文留下您的邮箱或者问题说明。

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值