– 需要在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;
}
声明:
本文采用
BY-NC-SA
协议进行授权,如无注明均为原创,转载请注明转自
我的知识库
本文地址: QT中QByteArry数组和int数组的相互转化
本文地址: QT中QByteArry数组和int数组的相互转化