将数据保存到二进制文件中,哪种方法是正确的



我想将字符串保存到二进制文件中,这是正确的吗?

std::ofstream outfile(filename, std::ios_base::binary);

string str="some text";
for (const char &i : str) {
outfile.write((const char *) &i, sizeof(char));
}

或:

outfile.write((const char *) &str, str.length()*sizeof(char));

注意:我不想在字符串末尾保存null终止符

IMHO,正确的方法是先写字符串的长度,然后写字符串的内容:

const std::string example_text = "Redwood trees are very tall.";
const unsigned int length = example_text.length();
outfile.write((char *) &length, sizeof(length));
outfile.write(example_text.data(), length);

这允许使用块读取:

unsigned int length;
outfile.read((char *) &length, sizeof(length));
std::string text;
text.reserve(length);
outfile.read(text.data(), length);

最新更新