我在二进制文件double和string中写入内容。我想读取此文件,但是由于数据类型混合,如何正确读取文件的内容? (知道该行是字符串还是双精度字符)
这是我的代码:
int main(){
double nb = 26.2254;
std::string str = "Hello";
std::ofstream myfile("test.bin", std::ios::out | std::ios::binary);
myfile.write(str.c_str(), str.length());
myfile.write((char*)&nbstr, sizeof(nb));
myfile.write(str.c_str(), str.length());
myfile.write(str.c_str(), str.length());
myfile.close();
}
在将nb
转换为字符串之前,我将其写入文件中,因此我只能读取字符串。我不知道这是不是一个好的解决方案。
int main(){
double nb = 26.2254;
std::string nbstr;
std::string str = "Hello";
std::ostringstream ss;
nbstr = std::to_string(nb);
std::ofstream myfile("test.bin", std::ios::out | std::ios::binary);
myfile.write(str.c_str(), str.length());
myfile.write(nbstr.c_str(), nbstr.length());
myfile.write(str.c_str(), str.length());
myfile.write(str.c_str(), str.length());
myfile.close();
std::ifstream openfile("test.bin", std::ios::in | std::ios::binary);
ss << openfile.rdbuf();
openfile.close();
std::cout << ss.str() << std::endl;
}
答案 0 :(得分:0)
对于二进制文件,您需要以某种方式指定写入字符串的长度。可以通过明确地写长度来实现,即
size_t len = str.length();
myfile.write(&len, sizeof(len));
myfile.write(str.c_str(), len);
或者您也可以只写'\0'
-在字符串的结尾处终止字符,c_str()
会提供帮助,因此您只需要编写它:
myfile.write(str.c_str(), str.length() + 1);
阅读时,您要么先阅读长度,要么在文件中搜索'\0'
。
顺便说一句,与其使用write()
和read()
,还不如使用<<
和>>
运算符,如下所示:
myfile << str;
myfile << nb;