簡體   English   中英

在協議緩沖區消息中存儲二進制數據緩沖區

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM