QT5 串口数据类型转换

最近项目用到串口数据转化,发来的数转换成int型和float型,发现toInt()函数不可用,研究了几天终于解决了这个问题。

requestData=myCom->readAll();//用requestData存储从串口那读取的数据读取第一个串口

    if(requestData.size()==20)//这个是我的数据字节数,初期用于筛选数据
    {
 
 
                  twoBytes=requestData.mid(0,4);//取四个字节 四个字节传来int型数据 
                  int j = twoBytes[3] & 0x000000ff;
                  j |= ((twoBytes[2] << 8) & 0x0000ff00);
                  j |= ((twoBytes[1] << 16) & 0x00ff0000);
                  j |= ((twoBytes[0] << 24) & 0xff000000);
                  ui->label4->setText(QString::number(j));
 
                  twoBytes2=requestData.mid(4,4);
                  int d = twoBytes2[3] & 0x000000ff;
                  d |= ((twoBytes2[2] << 8) & 0x0000ff00);
                  d |= ((twoBytes2[1] << 16) & 0x00ff0000);
                  d |= ((twoBytes2[0] << 24) & 0xff000000);
                  ui->label2->setText(QString::number(d));
 
                  twoBytes3=requestData.mid(8,4);
                  int m = twoBytes3[3] & 0x000000ff;
                  m |= ((twoBytes3[2] << 8) & 0x0000ff00);
                  m |= ((twoBytes3[1] << 16) & 0x00ff0000);
                  m |= ((twoBytes3[0] << 24) & 0xff000000);
                  ui->label3->setText(QString::number(m));
 
                  twoBytes4=requestData.mid(12,4);
                  union MyUnion          //这个是用来解决float型数据,下位机float数据很困难,转为发送 unsigned char型,上位机接受了数据,利用联合转为float数据
                  {
                    unsigned char info[4];
                    float f;
                  }FLOAT_DATA;
                  FLOAT_DATA.info[0]=twoBytes4[0];
                  FLOAT_DATA.info[1]=twoBytes4[1];
                  FLOAT_DATA.info[2]=twoBytes4[2];
                  FLOAT_DATA.info[3]=twoBytes4[3];
                  ui->label1->setText(QString::number(FLOAT_DATA.f));
 
                  twoBytes5=requestData.mid(16,4);
                  union YouUnion
                  {
                    unsigned char info[4];
                    float f;
                  }FLOAT_DATA1;
                  FLOAT_DATA1.info[0]=twoBytes5[0];
                  FLOAT_DATA1.info[1]=twoBytes5[1];
                  FLOAT_DATA1.info[2]=twoBytes5[2];
                  FLOAT_DATA1.info[3]=twoBytes5[3];
 
                  ui->label5->setText(QString::number(FLOAT_DATA1.f));
    }
    requestData.clear();    //清除缓冲区 这一步是必须的
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值