Protobuf: строка C++ с нулевыми символами внутри

Я имею дело с буфером в памяти, который читается как protobuf. Мне нужно десериализовать это. Содержимое этого protobuf содержит строку, которая может иметь или не иметь нулевой символ внутри строки. Например, строка может выглядеть примерно так: "имя \0first". Если у меня есть такой ввод, строка, которую я могу десериализовать, всегда выглядит как "имя", так как класс строки удаляет часть после нулевого символа.

Как я могу получить доступ к полной строке в этом случае? Функция длины строки явно не помогает в этом случае.

2 ответа

Решение

Во-первых, вам нужно правильно построить строку. Вы не можете создать его, используя конструкторы, которые ищут терминаторы NULL, вот что string(const char *) ищет.

Вы должны использовать конструктор, который принимает указатель и длину.

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

Если вы уже создали строку и хотите добавить данные со встроенными значениями NULL, вы можете использовать append() метод.

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

Используйте конструктор, который принимает количество символов std::string s(buffer, nChars), Это пятый из этой ссылки.

Другие вопросы по тегам