本人最近因为项目新学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;}东西比较容易,但本人新手,网上能搜索到的解决方法比较少,所以花了不少时间。希望这个做出来能帮到后来者