从保存了double和string的二进制文件中读取

时间:2019-07-10 12:28:56

标签: c++ file binary

我在二进制文件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;
}


1 个答案:

答案 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;