1

protobuf として読み取られているメモリ内のバッファーを扱っています。私はそれを逆シリアル化する必要があります。この protobuf のコンテンツには、文字列内に null 文字がある場合とない場合がある文字列が含まれています。たとえば、文字列は "name\0first" のようになります。このような入力がある場合、文字列クラスはヌル文字の後の部分を削除するため、デシリアライズできる文字列は常に「名前」のように見えます。

この場合、完全な文字列にアクセスするにはどうすればよいですか? この場合、文字列長関数は明らかに役に立ちません。

4

2 に答える 2

4

まず、文字列を適切に構築する必要があります。探しているものである NULL ターミネータを探しているコンストラクターを使用して構築することはできませんstring(const char *)

ポインターと長さを取るコンストラクターを使用する必要があります。

string s("name\0first", 10);

すでに文字列を作成しており、NULL が埋め込まれたデータを追加したい場合は、append()メソッドを使用できます。

string s;
s.append("name\0first", 10);
于 2015-02-28T04:19:21.683 に答える
3

文字数を取るコンストラクタを使用しますstd::string s(buffer, nChars)。この参考 書から 5 つ 目です .

于 2015-02-27T22:51:38.667 に答える