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才能调用。

QByteArray da =m_tcpsocket->readAll();//获得数组
    QString strMessage = da.toHex();
    int len = strMessage.length();
    vector<int> readM;//因为无法像C#一样直接定义动态数组,vector需要一下,这个readM就是我们所需要的int数组了
    for(int i=0;i2;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 
  
    {
        byteArry[i]=in[i];
    }
    return byteArry;
}
东西比较容易,但本人新手,网上能搜索到的解决方法比较少,所以花了不少时间。希望这个做出来能帮到后来者

你可能感兴趣的:(QT中QByteArry数组和int数组的相互转化)