gpt4 book ai didi

c++ - 结构中浮点 vector 的序列化

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

我有以下代码:

struct MsgDetectedTarget
{
int target_id;
float bbox[4]; // need to change
};

在序列化函数中:

void SerializeToArray(std::vector<char>& buffer, int& dst_len, void* pMsg, int len){
buffer.resize(HEADER_LENGTH + len);
// encode message header
char header[HEADER_LENGTH + 1] = "";
std::sprintf(header, "%8d", len);

std::memcpy(&buffer[0], header, HEADER_LENGTH);

// encode message body
std::memcpy(&buffer[0]+HEADER_LENGTH, reinterpret_cast<char*>(pMsg), len);

dst_len = HEADER_LENGTH + len;
}

如果MsgDetectedTarget中的data bbox是固定大小的,序列化起来很容易。

  MsgDetectedTarget msg;
msg.target_id = 1;
msg.bbox[0] = 0;
msg.bbox[1] = 0;
msg.bbox[2] = 500;
msg.bbox[3] = 500;

std::vector<char> msgdata;
int destlen;
SerializeToArray(msgdata, destlen, &msg, sizeof(msg));

问题:

我想把MsgDetectedTarget中的bbox改成float的vector,如何进行相应的序列化和反序列化?

非常感谢。

最佳答案

如果您不能使用 Boost 序列化,您可以按照@Jean-FrancoisFabre 的建议进行操作。像这样的东西:

void SerializeToArray(std::vector<char>& buffer, int& dst_len, MsgDetectedTarget* msg) {
size_t numFloats = msg->bbox.size();
auto len = sizeof(int) + sizeof(size_t) + sizeof(float)*numFloats;
buffer.resize(HEADER_LENGTH + len);

// encode message header
char header[HEADER_LENGTH + 1] = "";
std::sprintf(header, "%8d", len);
std::memcpy(&buffer[0], header, HEADER_LENGTH);

// encode target_id
std::memcpy(&buffer[0] + HEADER_LENGTH, static_cast<char*>(&msg->target_id), sizeof(int));

// encode numFloats
std::memcpy(&buffer[0] + HEADER_LENGTH + sizeof(int), static_cast<char*>(&numFloats), sizeof(size_t));

// encode the vector of float
std::memcpy(&buffer[0] + HEADER_LENGTH + sizeof(int) + sizeof(size_t),
static_cast<char*>(&bbox[0]), sizeof(float)*numFloats);

dst_len = HEADER_LENGTH + len;
}

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

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