web-dev-qa-db-ja.com

なぜプロトコルバッファバイトはC ++で文字列なのですか?

プロトコルバッファはそれができると言っています 任意のバイトシーケンスを含む 。しかし、データに「\ 0」が含まれている場合、プロトコルバッファが文字列変数からデータ全体をエンコードする方法。

18
xiemeilong

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

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

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

または

pb.set_foo( data, data_length );
16