У меня есть простой вопрос о библиотеке буферов протоколов std :: string и google. Я определил сообщение следующим образом:Использование буферов протокола для отправки значков/небольших изображений
message Source
{
required string Name = 1;
required uint32 Id = 2;
optional string ImplementationDLL = 3;
optional bytes Icon = 4;
}
Я хочу использовать поле Icon, чтобы отправить изображение, то, скорее всего, будет изображение PNG. После подачи этого файла на компилятор protobuf я получил что-то вроде этого, чтобы получить доступ к полю 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();
Функция std :: string * mutable_icon() дает мне головную боль. Он возвращает std :: string, но я считаю, что строки не могут содержать двоичные данные! или они могут?
Я могу использовать функцию set_icon (const void *, size_t), чтобы поместить двоичные данные, но тогда как я могу получить ее с другой стороны?
Я думаю, std :: string может содержать двоичные данные, но как ????
Это довольно неэффективно, чтобы написать это один байт за один раз. Лучше просто написать ['binFile.data()'] (http://www.cplusplus.com/reference/string/string/data/) за один раз. – poolie