– 需要在QT上搭建个可以发送16进制显示的二进制数组的TCP通讯。我们要说的是在:

QByteArry    Arry=TCPSoket->readAll();

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

1.先将QByteArry转换成QString,

2.再将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;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;
}