数据接收:
QByteArray datagram;
datagram.resize(tcpSock.bytesAvailable());
tcpSock.read(datagram.data(), datagram.size());
if(hexRecv)
{
mutexRecv.lock();
dataRecv.append(datagram);
mutexRecv.unlock();
}
else
{
strTemp.append(datagram.data());
mutexRecv.lock();
strRecv.append(strTemp);
mutexRecv.unlock();
}
数据接收时,根据自己需要,配置十六进制或字符形式接收、解析、显示。
十六进制收发时,用QByteArray 存储、解析较为高效,省去了一次转换为字符串的过程,在数据量大的时候,效果尤为突出。
字符形式收发时,转为QString存储、解析较为便捷,使用QString的截取、查找、转码等方法更为便捷。
QByteArray 是qt封装好的类,较byte[]存储相对累赘,但操作更为便捷,如:
if(hexRecv)
{
dataTemp.append(dataRecv);
while (dataTemp.length() != 0)
{
if(Rule)
{
QByteArray data;
int HIndex = dataTemp.indexOf(bHead);
if(HIndex > 0)
{
dataTemp = dataTemp.mid(HIndex);
HIndex = 0;
}
else if(HIndex < 0)
{
qDebug()<<"No bHead Data:"<<dataTemp.toHex(