//不能用下面的方法读取发送端的IP地址和端口
// QString peerAddr=udpSocket->peerAddress().toString();
// quint16 peerPort=udpSocket->peerPort();
// QString peer="[From "+peerAddr+":"+QString::number(peerPort)+"] ";
QByteArray datagram;
datagram.resize(udpSocket->pendingDatagramSize());//获取udp缓冲池里的数据的大小
QHostAddress peerAddr;
quint16 peerPort;
udpSocket->readDatagram(datagram.data(),datagram.size(),&peerAddr,&peerPort);
float cpu;
auto data = datagram.data();
memcpy(&cpu, data+5, 4);
QString str=datagram.data();
qDebug()<<cpu;
由于读取数据的类型都是QByteArray,这里将float类型的数据取出来,auto关键字是C++11以后出来的:
这里是引用
在开发实践中,有时候我们并不能非常容易地确定一个变量应该具有的数据类型。比如,将某个复杂表达式作为初始值赋值给一个新定义的变量时,我们往往很难确定这个表达式的数据类型,从而无法确定变量应有的数据类型。为了解决这个问题,C++11为我们提供了auto关键字,使用它作为某个变量定义的数据类型,编译器会根据这个变量的初始值,自动推断出这个变量合理的数据类型而无需我们人为指定。
memcpy可以对值进行内存上的拷贝,这里将cpu变量赋值为data的第五个字节开始,往后数4个字节的内容。