[英]Storing binary data buffer in protocol buffer message
我有一個二進制數據緩沖區,我想將其存儲在協議緩沖區中。
在文檔( https://developers.google.com/protocol-buffers/docs/proto#scalar )中,它表示bytes
類型等效於C ++中的string
。 我不敢相信,所以我不得不嘗試一下,是的,這似乎是事實。
這個原型:
message BufferMsg {
required bytes buffer = 1;
}
給出一個包含以下內容的消息定義:
private:
::std::string* buffer_;
公共的setter / getter API如下所示:
// required bytes buffer = 1;
inline bool has_buffer() const;
inline void clear_buffer();
static const int kBufferFieldNumber = 1;
inline const ::std::string& buffer() const;
inline void set_buffer(const ::std::string& value);
inline void set_buffer(const char* value);
inline void set_buffer(const void* value, size_t size);
inline ::std::string* mutable_buffer();
inline ::std::string* release_buffer();
inline void set_allocated_buffer(::std::string* buffer);
當然,這不是在消息中存儲二進制數據的方法。 應該怎么做? 在C ++中,我通常會使用unsigned char
數組或類似的東西來存儲數據。
std::string
盡管旨在用於文本數據,但並不完全綁定到它。 它不進行驗證,並且通常對其緩沖區的內容沒有任何限制。 因此,如果需要,可以將其用作std::vector<char>
。
如果您使用c_str()
和C樣式的字符串函數處理結果,則嵌入式零僅是一個問題。
主要問題是char
可能會在您的平台上簽名,這使得與unsigned char
相比,以字節類型進行操作不太方便。 恐怕這只是您必須忍受的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.