gpt4 book ai didi

c++ - 在 C 中将结构序列化/反序列化为 char*

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:01:03 25 4
gpt4 key购买 nike

我有一个结构

struct Packet {
int senderId;
int sequenceNumber;
char data[MaxDataSize];

char* Serialize() {
char *message = new char[MaxMailSize];
message[0] = senderId;
message[1] = sequenceNumber;
for (unsigned i=0;i<MaxDataSize;i++)
message[i+2] = data[i];
return message;
}

void Deserialize(char *message) {
senderId = message[0];
sequenceNumber = message[1];
for (unsigned i=0;i<MaxDataSize;i++)
data[i] = message[i+2];
}

};

我需要将其转换为 char* ,最大长度 MaxMailSize > MaxDataSize 以便通过网络发送,然后在另一端反序列化它

我不能使用 tpl 或任何其他库。

有什么方法可以使它变得更好吗?我对此不太满意,或者这是我们能做的最好的事情。

最佳答案

由于这是通过网络发送的,我强烈建议您在传输之前将这些数据转换为网络字节顺序,并在接收时转换回主机字节顺序。这是因为字节顺序在任何地方都不一样,一旦你的字节顺序不正确,就很难反转它们(取决于接收方使用的编程语言)。字节排序函数与套接字一起定义,并命名为 htons()htonl()ntohs()ntohl( )。 (在这些名称中:h 表示“主机”或您的计算机,n 表示“网络”,s 表示“短”或 16 位值,l 表示“长”或 32 位值)。

那么你就只能靠自己的序列化了,C 和 C++ 没有自动执行序列化的方法。有些软件可以生成代码来为您执行此操作,例如 ASN.1 实现 asn1c,但它们很难使用,因为它们涉及的不仅仅是通过网络复制数据。

关于c++ - 在 C 中将结构序列化/反序列化为 char*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1653681/

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