2012-04-10 310 views
5

由於我沒有得到關於this問題的答案我得到了原型並檢查了我自己,因爲我的數據集標題需要固定大小,所以我需要固定大小的字符串。那麼,是否可以在協議緩衝區中指定固定大小的字符串或字節數組?這在這裏並不顯而易見,我有點不好意思將固定大小的字符串強制插入標題消息。 --i.e,std::string('\0', 128);協議緩衝區:無固定大小緩衝區的符號?

如果沒有我寧願使用一個#pragma pack(1) struct header {...};'

編輯

問題間接回答here。將回答併除外

回答

2

protobuf在協議中沒有這樣的概念,也沒有.proto模式語言。在字符串和blob中,使用長度前綴(本身使用varint編碼,所以即使長度是可變長度),可變長度在技術上始終爲

當然,如果您只存儲特定長度的數據,那麼它將排隊。另請注意,由於protobuf中的字符串是使用UTF-8編碼的unicode,所以編碼數據的長度不像那麼簡單(除非只使用ASCII字符)。

0

這是對上一個答案的一個細微的說明。 Protocol Buffers does not將字符串編碼爲UTF-8,它將它們編碼爲常規字節。線上格式將是消耗的字節數,隨後是實際字節數。請參閱https://developers.google.com/protocol-buffers/docs/encoding/

雖然線上格式總是相同,但協議緩衝區爲開發人員提供了兩個接口,字符串和字節,主要區別在於前者通常會嘗試向開發人員提供字符串類型,因爲後者將嘗試提供字節類型(即Java將爲字符串提供字符串,爲字節提供字節數組)。

+0

UTF-8是Unicode的編碼 - 它將Unicode字符轉換爲字節。 Protobuf使用UTF-8獲取常規字節。 – solidsnack 2014-01-21 19:51:04

+0

@snack可否請您仔細重讀第一個文件。 – Claris 2014-01-21 21:35:16