C++ Google协议缓冲区消息到字节数组C++;

C++ Google协议缓冲区消息到字节数组C++;,c++,c,windows,protocol-buffers,C++,C,Windows,Protocol Buffers,我目前使用两种消息协议,一种是google proto,另一种是c-structs。将google协议缓冲区消息(MessageLite)转换为字节数组的最佳解决方案是什么 例如,我想转换以下google proto消息: message GoogleRequest { optional int32 request = 1 [default = 0]; } 致: 我尝试了以下方法,但无效: GoogleRequest reqMsg; reqMsg.set_request(1234);

我目前使用两种消息协议,一种是google proto,另一种是c-structs。将google协议缓冲区消息(
MessageLite
)转换为字节数组的最佳解决方案是什么

例如,我想转换以下google proto消息:

message GoogleRequest
{
     optional int32 request = 1 [default = 0];
}
致:

我尝试了以下方法,但无效:

GoogleRequest reqMsg;
reqMsg.set_request(1234);

int size = reqMsg.ByteSize();
Request* reqStruct = new Request;
reqMsg.SerializeToArray((void*)reqStruct , size);
任何建议,或是最好的方法:

reqStruct->request = reqMsg.request();

我有很多消息类型,如果能找到一种通用的方法,我会非常棒。

您说要将消息转换为字节数组,但您的代码表明您正在尝试将其转换为C结构(
请求
)。不支持转换为C结构。转换为字节数组(即
char
数组)很容易:

或者,另一种方式:

std::string bytes = reqMsg.SerializeAsString();
const char* array = bytes.data();
int size = bytes.size();
但是,此数组不是结构,根据内容的不同,它可能有许多不同的大小。除了编写手动复制每个字段的代码外,无法转换为结构

int size = reqMsg.ByteSize();
char* array = new char[size];
reqMsg.SerializeToArray(array, size);
std::string bytes = reqMsg.SerializeAsString();
const char* array = bytes.data();
int size = bytes.size();