gpt4 book ai didi

c++ - 如何将可变大小结构转换为字符数组

转载 作者:行者123 更新时间:2023-11-28 04:33:55 24 4
gpt4 key购买 nike

我正在尝试序列化一个结构以作为 UDP 消息发送。我遇到的问题是该结构包含一个可变长度的子结构数组,如下所示:

struct SubStruct
{
short val1;
short val2;
};

struct Message
{
short numSubStructs;
SubStruct* structs;
};

我用于发送固定长度消息的方法是将结构转换为 unsigned char*。下面的 MSG_LENGTH 等于 sizeof(short) + numSubStructs * sizeof(SubStruct)

send(socket, reinterpret_cast<unsigned char*>(&someMessage), MSG_LENGTH);

这适用于我所有的固定长度消息,但不适用于可变长度消息。查看通过套接字发送的数据,我很确定它发送的是结构指针的实际地址。

我的问题是,除了遍历指针(数组)并附加到某个缓冲区之外,是否还有其他方法可以序列化这种结构?

谢谢

最佳答案

尝试这样的事情:

char *serializedMessage = new char[sizeof(short) + someMessage.numSubStructs * sizeof(SubStruct)];
// Error check here

// Insert the count of structs
memcpy(serializedMessage, &someMessage.numSubStructs, sizeof(short));
// Copy the structs themselves.
memcpy(&serializedMessage[sizeof(short)], someMessage.structs,
someMessage.numSubStructs * sizeof(SubStruct));

// Transmit serializedMessage

delete[] serializedMessage;

注意这里不关注数据的字节顺序,所以如果源机器和目标机器的字节顺序不同,它很可能会失败。

关于c++ - 如何将可变大小结构转换为字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52067491/

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