J'ai une question simple à propos de std :: string et de la bibliothèque de tampons de protocole de google. J'ai défini un message comme ceci:Utilisation de tampons de protocole pour envoyer des icônes/petites images
message Source
{
required string Name = 1;
required uint32 Id = 2;
optional string ImplementationDLL = 3;
optional bytes Icon = 4;
}
Je veux utiliser le champ Icône d'envoyer une image, il sera très probablement une image .png. Après l'avoir introduit dans le compilateur protobuf, j'ai obtenu quelque chose comme ceci pour accéder/manipuler le champ Icon.
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();
La fonction std :: string * mutable_icon() me donne un mal de tête. Il retourne une chaîne std :: mais je crois que les chaînes ne peuvent pas contenir de données binaires! ou peuvent-ils?
Je peux utiliser la fonction set_icon (const void *, size_t) pour mettre des données binaires, mais comment puis-je l'obtenir de l'autre côté?
Je pense que std :: string pourrait contenir des données binaires, mais comment?
qui est assez inefficace pour l'écrire sur un octet à la fois. Mieux vaut simplement écrire ['binFile.data()'] (http://www.cplusplus.com/reference/string/string/data/) en une seule fois. – poolie