Mit Protocol Buffers zu icons / kleine Bilder senden
-
12-09-2019 - |
Frage
Ich habe eine einfache Frage zu std :: string und Protokoll-Puffer-Bibliothek von Google. Ich habe eine Nachricht definiert wie folgt:
message Source
{
required string Name = 1;
required uint32 Id = 2;
optional string ImplementationDLL = 3;
optional bytes Icon = 4;
}
Ich mag das Feld Symbol verwenden, um ein Bild zu senden, ist es sehr wahrscheinlich ein PNG-Bild sein. dies den protobuf Compiler nach der Fütterung erhielt ich so etwas zu Zugang / manipulieren, um das Feld Symbol.
inline bool has_icon() const;
inline void clear_icon();
static const int kIconFieldNumber = 4;
inline const ::std::string& icon() const;
inline void set_icon(const ::std::string& value);
inline void set_icon(const char* value);
inline void set_icon(const void* value, size_t size);
inline ::std::string* mutable_icon();
das std :: string * mutable_icon () -Funktion mir Kopfschmerzen gibt. Es ist eine Rückkehr std :: string, aber ich glaube Strings Binärdaten nicht halten kann! oder sie können?
ich kann set_icon (const void *, size_t) Funktion Binärdaten zu setzen, verwenden aber dann wie kann ich es auf der anderen Seite bekommen?
ich denke, std :: string binäre Daten zu halten, möglicherweise in der Lage, aber wie ????
Lösung 3
die Antwort auf diese Frage: How do you konstruiert eine std :: string mit einer eingebetteten null?
Andere Tipps
const std::string s = icon();
const void *data=s.c_str();
C ++ Strings die Länge explizit, so darstellen können sie Binärdaten enthalten, einschließlich 0-Zeichen, das C-Strings beendet .
Sie müssen das Bestehen der String-Funktionen zu vermeiden, dass ein C-String erwartet, da sie nicht 0-Zeichen eingebettet werden handhaben.
void String2Image(string binFile,const char* outImage)
{
fstream imgFile(outImage,ios::binary|ios::out);
for(int i=0; i<binFile.length(); ++i)
{
imgFile << binFile[i];
}
imgFile.close();
}