QT中QByteArry数组和int数组的相互转化

      本人最近因为项目新学QT,需要在QT上搭建个可以发送16进制显示的二进制数组的TCP通讯。以前的开发平台是C#,这种数组只要用byte数组就可以,显示方便。如今转到C++平台,面对满是指针的调用不知所措。QT中TCP通讯网上就很多了,这里不再赘述。我们要说的是在:

QByteArry    Arry=TCPSoket->readAll();

获得的的是QByteArry数组,其显示的是ASCII码形式,而我通讯报文却又是16进制数据,如此对比起来比较麻烦。所以需要将获得的数组转换为int型,如此才好对比。

在搜索了好久之后,并没有找到一个直接合适的方法可准确地获得想要的数组。于是只能通过中间转换了。即先将QByteArry转换成QString,再将QString转成16进制int数组,进行比较。我这里使用了vector,所以需要#include<vector>才能调用。

QByteArray da =m_tcpsocket->readAll();//获得数组
    QString strMessage = da.toHex();
    int len = strMessage.length();
    vector<int> readM;//因为无法像C#一样直接定义动态数组,vector需要一下,这个readM就是我们所需要的int数组了
    for(int i=0;i<len/2;i++)
    {
        readM.push_back(strMessage.mid(2*i,2).toInt(0,16));
    }

而发送时,将准确的16进制数组发送,就要将int存入QByteArry了,

 
void MainWindow::sendMessage()
{
    int in[]={0x81,0x30,0x00,0x0E,0xA0,0x02,0x3F,0xFF,0x80,0x3F,0xFF,0xFF,0x0F,0xEC};//所要发送的报文
    int siz =sizeof(in)/sizeof(in[0]);
    QByteArray sendM=InnitialQByteArry(in,siz);
    m_tcpsocket->write( sendM);
 
}

QByteArray InnitialQByteArry(int in[],int len)//输入int数组和数组长度,将数组中的值存入QByteArry中
{
    QByteArray byteArry;
    byteArry.resize(len);
    for (int i=0;i<len;i++)
    {
        byteArry[i]=in[i];
    }
    return byteArry;
}
东西比较容易,但本人新手,网上能搜索到的解决方法比较少,所以花了不少时间。希望这个做出来能帮到后来者
  • 6
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值