Да, вы можете встраивать нули в std::string
.
Пример:
std::string s;
s.push_back('\0');
s.push_back('a');
assert(s.length() == 2);
Примечание: std::string
элемент c_str()
всегда будет добавлять нулевой символ в возвращенный буфер символов; Однако std::string
член data()
может добавлять или не добавлять нулевой символ в возвращенный буфер символов.
Будьте осторожны с оператором + =
Одна вещь, на которую следует обратить внимание, это не использовать operator+=
с char*
на RHS. Он будет складываться только до нулевого символа.
Например:
std::string s = "hello";
s += "\0world";
assert(s.length() == 5);
Правильный путь:
std::string s = "hello";
s += std::string("\0world", 6);
assert(s.length() == 11);
Хранение двоичных данных, более распространенных для использования std :: vector
Обычно для хранения произвольных двоичных данных чаще используется std::vector
.
std::vector<char> buf;
buf.resize(1024);
char *p = &buf.front();
Это, вероятно, более распространено, поскольку члены std::string
data()
и c_str()
возвращают константные указатели, поэтому память не может быть изменена. с помощью & buf.front () вы можете напрямую изменять содержимое буфера.