我有一個關於std :: string和google的協議緩衝區庫的簡單問題。 我已經定義了一個消息,像這樣:使用協議緩衝區發送圖標/小圖像
message Source
{
required string Name = 1;
required uint32 Id = 2;
optional string ImplementationDLL = 3;
optional bytes Icon = 4;
}
我想使用的圖標字段發送圖像,這很可能將是一個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 2013-10-18 04:50:30