Messagerie de tampon de protocole Google à octet tableau C ++

J’utilise actuellement deux protocoles de messagerie, l’un est Google Proto et l’autre est c-structs. Quelle est la meilleure solution pour convertir un message tampon de protocole Google ( MessageLite ) en un tableau d’octets?

Je souhaite, par exemple, convertir le message Google Proto suivant:

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

à:

 struct Request { int request; }; 

J’ai essayé ce qui suit mais ça ne marche pas:

 GoogleRequest reqMsg; reqMsg.set_request(1234); int size = reqMsg.ByteSize(); Request* reqStruct = new Request; reqMsg.SerializeToArray((void*)reqStruct , size); 

Des suggestions ou la meilleure façon de faire:

 reqStruct->request = reqMsg.request(); 

J’ai beaucoup de types de messages et je serais génial de trouver un moyen générique de le faire.

Vous dites que vous voulez convertir votre message en un tableau d’octets, mais votre code suggère que vous essayez de le convertir en une structure C ( Request ). La conversion en structure C n’est pas prise en charge. La conversion en un tableau d’octets (c’est-à-dire un tableau de caractères) est facile:

 int size = reqMsg.ByteSize(); char* array = new char[size]; reqMsg.SerializeToArray(array, size); 

Ou d’une autre manière:

 std::ssortingng bytes = reqMsg.SerializeAsSsortingng(); const char* array = bytes.data(); int size = bytes.size(); 

Cependant, ce tableau n’est pas une structure et peut avoir différentes tailles en fonction du contenu. Il n’y a aucun moyen de convertir en une structure, sauf pour écrire du code qui copie sur chaque champ manuellement.