这里主要是记录一下在传输过程中,无论tcp,udp,还是其他什么协议,我们肯定会遇到各种字段不统一字节数的情况。
譬如,字段1是1个字节,字段2是两个字节,字段3是4个字节,以此类推,可能里面还有8个字节的字段
如果你要sizeof(这个结构体或者是数据类),那么得到的就是结构体中最大的那个数据的类型的字节数。
一般我们传输时,经常会用到char*,大部分人可能还在使用memcpy的方式,这里不说其他,先说QByteArray的使用。
//devId数组是3个字节,str为一个16进制数字字符串,如:“345434”,实现将str放入devId中
QByteArray hexData = QByteArray::fromHex(str.toLocal8Bit());
QDataStream stream(hexData);
stream.setByteOrder(QDataStream::BigEndian);
uint8_t a,b,c;
stream>>a>>b>>c;
qDebug()<<"abc="<<a<<b<<c;
devId[0] = a;
devId[1] = b;
devId[2] = c;
QByteArray byteArr;
quint16 aa;
QDataStream out(&byteArr,QIODevice::WriteOnly | QIODevice::Append );
stream.setByteOrder(QDataStream::BigEndian);
out << aa;
//byteArr已经添加了aa这个2字节整型了。
如果这里你是整个协议数据的话,那么out一直往下添加即可。
out << bb << cc << dd << ff << hh;