gpt4 book ai didi

c++ - 结构序列化

转载 作者:可可西里 更新时间:2023-11-01 14:56:01 30 4
gpt4 key购买 nike

假设我有一个结构,我想使用 winsock 2 通过网络将其成员值发送到另一个系统。我正在使用 C++ 语言。 我如何将它转换为 char * 记住结构必须在发送之前被序列化以及我如何在另一端将 char * 反序列化为结构?我发现提升序列化是对类似问题的建议,但任何人都可以用一个小代码片段来说明序列化和反序列化吗?

这个问题可能看起来很基础,但相关帖子的其他答案并没有多大帮助。

最佳答案

以下示例显示了将 struct 序列化为 char 数组并将其反序列化的最简单方法。

#include <iostream>
#include <cstring>

#define BUFSIZE 512
#define PACKETSIZE sizeof(MSG)

using namespace std;

typedef struct MSG
{
int type;
int priority;
int sender;
char message[BUFSIZE];
}MSG;

void serialize(MSG* msgPacket, char *data);
void deserialize(char *data, MSG* msgPacket);
void printMsg(MSG* msgPacket);

int main()
{
MSG* newMsg = new MSG;
newMsg->type = 1;
newMsg->priority = 9;
newMsg->sender = 2;
strcpy(newMsg->message, "hello from server\0");
printMsg(newMsg);

char data[PACKETSIZE];

serialize(newMsg, data);

MSG* temp = new MSG;
deserialize(data, temp);
printMsg(temp);

return 0;
}

void serialize(MSG* msgPacket, char *data)
{
int *q = (int*)data;
*q = msgPacket->type; q++;
*q = msgPacket->priority; q++;
*q = msgPacket->sender; q++;

char *p = (char*)q;
int i = 0;
while (i < BUFSIZE)
{
*p = msgPacket->message[i];
p++;
i++;
}
}

void deserialize(char *data, MSG* msgPacket)
{
int *q = (int*)data;
msgPacket->type = *q; q++;
msgPacket->priority = *q; q++;
msgPacket->sender = *q; q++;

char *p = (char*)q;
int i = 0;
while (i < BUFSIZE)
{
msgPacket->message[i] = *p;
p++;
i++;
}
}

void printMsg(MSG* msgPacket)
{
cout << msgPacket->type << endl;
cout << msgPacket->priority << endl;
cout << msgPacket->sender << endl;
cout << msgPacket->message << endl;
}

关于c++ - 结构序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16543519/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com