2012-07-13 10 views
13

プロトコルバッファーそれはcontain any arbitrary sequence of bytesと言うことができます。私のデータに '\ 0'が含まれている場合、プロトコルバッファが文字列変数から私の全データをどのようにエンコードすることができるのでしょうか。なぜprotocol buffer bytesはC++の文字列ですか?

+0

あなたは「文字列変数」とはどういう意味ですかましたか?これは 'char *'ですか?それはC、Java、または何か他のものですか? –

+1

@Marcelo私は彼が ''から 'string'を意味していると推測しています... –

+1

私はもうC++の人ではありませんが、' \ 0'はC++の文字列に特別な意味を持ちません。 *あなたが '\ 0'を特別に扱うメソッドを使用している場合を除きます。だから...これらのメソッドを使わないでください。 –

答えて

12

プロトコルバッファのC++実装では、バイトタイプとストリングタイプがstd::stringとして返されます。この構造体には、対応するデータの長さ(データそのもの)を示す長さ関数が含まれています。したがって、埋め込まれた\0文字の特別な意味はありません。

設定関数は文字列も受け入れるか、バッファと長さを受け入れるバージョンがあります。 あなたがフィールドを設定したい場合は、単にこれを行うことができます。

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

または

pb.set_foo(data, data_length); 
+0

https://stackoverflow.com/questions/2845769/can-a-stststring-contain-embedded-nullsも参照してください。 – Raedwald

関連する問題