2012-07-13 28 views
13

協議緩衝區說它可以contain any arbitrary sequence of bytes。但如果我的數據包含'\ 0',協議緩衝區如何編碼我的整個數據從一個字符串變量。協議緩衝區字節爲什麼在C++中是字符串?

+0

你所說的「字符串變量」是什麼意思?這是'char *'嗎?是C,Java還是其他? – 2012-07-13 09:21:06

+1

@Marcelo我猜他的意思是'字符串'從''...... – 2012-07-13 09:22:24

+1

我不再是一個C++人,但我的印象是'\ 0'在C++字符串中沒有特別的意義* *除非你使用專門處理'\ 0'的方法。所以...只是不使用這些方法? – 2012-07-13 09:23:30

回答

12

協議緩衝區的C++實現返回的字節和字符串類型爲std::string。這個結構包含一個長度函數,告訴你相應數據的時間長度(以及數據本身)。因此,嵌入的字符沒有特別的意義。

設置函數也接受一個字符串,或者有接受緩衝區和長度的版本。 如果你想設置一個字段,你可以只是這樣做:

pb.set_foo(std::string(data, data_length)); 

pb.set_foo(data, data_length); 
+0

參見https://stackoverflow.com/questions/2845769/can-a-stdstring-contain-embedded-nulls – Raedwald 2017-11-23 22:42:38

相關問題