QT tcp通讯中接收到的数据转结构体
时间: 2024-05-08 21:17:23 浏览: 134
在TCP通讯中,接收到的数据需要进行解析和处理,通常情况下,数据是以二进制的形式传输的,需要将其转换为结构体进行处理。以下是一个示例代码:
```c++
#include <iostream>
#include <cstring>
#include <arpa/inet.h>
using namespace std;
struct MyData {
int id;
char name[20];
double score;
};
int main() {
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
// 连接服务器代码省略
// 接收数据代码
char buffer[1024];
int len = recv(sockfd, buffer, 1024, 0);
if (len <= 0) {
// 接收失败,处理错误代码省略
}
// 将二进制数据转换为结构体
MyData data;
memcpy(&data.id, buffer, sizeof(int));
memcpy(data.name, buffer + sizeof(int), 20);
memcpy(&data.score, buffer + sizeof(int) + 20, sizeof(double));
data.id = ntohl(data.id); // 将网络字节序转换成主机字节序
data.score = ntohd(data.score); // 将网络字节序转换成主机字节序
// 处理数据代码
cout << "ID: " << data.id << endl;
cout << "Name: " << data.name << endl;
cout << "Score: " << data.score << endl;
// 关闭套接字代码省略
return 0;
}
```
在上述代码中,首先定义了一个结构体`MyData`,表示要接收的数据类型。然后,通过`recv`函数接收数据,并将其存储在`buffer`中。接着,使用`memcpy`函数将`buffer`中的二进制数据转换为结构体`MyData`。注意,在将整型和双精度浮点数转换为主机字节序之前,需要先将其转换为网络字节序,以确保跨平台兼容性。最后,对数据进行处理。
阅读全文