gpt4 book ai didi

c++ - 带有 vector 的可变大小数据包结构

转载 作者:太空宇宙 更新时间:2023-11-04 14:46:29 24 4
gpt4 key购买 nike

最近我一直在研究网络编程,但在构建具有可变“数据”属性的数据包时遇到了一些困难。几个先前的问题有很大帮助,但我仍然缺乏一些实现细节。我试图避免使用可变大小的数组,而只使用一个 vector 。但我无法让它正确传输,我相信它在序列化过程中的某个地方。

现在是一些代码。

包头

class Packet {

public:
void* Serialize();
bool Deserialize(void *message);

unsigned int sender_id;
unsigned int sequence_number;
std::vector<char> data;
};

数据包导入

typedef struct {
unsigned int sender_id;
unsigned int sequence_number;
std::vector<char> data;
} Packet;

void* Packet::Serialize(int size) {
Packet* p = (Packet *) malloc(8 + 30);
p->sender_id = htonl(this->sender_id);
p->sequence_number = htonl(this->sequence_number);
p->data.assign(size,'&'); //just for testing purposes
}

bool Packet::Deserialize(void *message) {
Packet *s = (Packet*)message;
this->sender_id = ntohl(s->sender_id);
this->sequence_number = ntohl(s->sequence_number);
this->data = s->data;
}

在执行期间,我只是创建一个数据包,为其分配成员,并相应地发送/接收。以上方法只负责序列化。不幸的是,数据永远不会传输。

这里有几件事要指出。我猜 ma​​lloc 是错误的,但我不确定如何计算它(即它会是什么其他值)。除此之外,我不确定以这种方式使用 vector 的正确方法,希望有人能告诉我如何(请使用代码示例!):)

编辑:我已将问题授予有关 vector 数据属性实现的最全面答案。感谢所有回复!

最佳答案

这个技巧适用于结构末尾的 C 风格数组,但不适用于 C++ vector 。无法保证 C++ vector 类会(而且很可能不会)将其包含的数据放入 Packet 结构中存在的“ header 对象”中。相反,该对象将包含指向存储实际数据的其他地方的指针。

关于c++ - 带有 vector 的可变大小数据包结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2395703/

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