qt udp 组博 收到的数据放结构体里面 只有前四个数据是对的后面是错的
时间: 2024-03-12 13:44:28 浏览: 40
这可能是因为您在定义接收缓冲区时没有考虑到数据的字节序问题。在网络传输中,数据的字节序可能与本地字节序不同,因此需要进行转换。您可以使用Qt提供的函数qFromBigEndian()或qFromLittleEndian()将数据转换为本地字节序,然后再放入结构体中。例如:
```cpp
QByteArray datagram;
QHostAddress sender;
quint16 senderPort;
// 从UDP套接字中读取数据报
while (udpSocket.hasPendingDatagrams()) {
datagram.resize(udpSocket.pendingDatagramSize());
udpSocket.readDatagram(datagram.data(), datagram.size(), &sender, &senderPort);
}
// 将数据转换为本地字节序
quint32 value1 = qFromBigEndian<quint32>(datagram.constData());
quint16 value2 = qFromBigEndian<quint16>(datagram.constData() + 4);
quint16 value3 = qFromBigEndian<quint16>(datagram.constData() + 6);
// 将数据放入结构体中
MyStruct myStruct;
myStruct.value1 = value1;
myStruct.value2 = value2;
myStruct.value3 = value3;
```
请注意,上述代码假设数据报中前4个字节是一个32位整数,后面2个字节分别是两个16位整数。如果您的数据格式不同,需要相应地修改代码。
阅读全文