Ifstream二进制读/写只接受char*



我在弄清楚如何正确地将此值写入文件时遇到了一点麻烦。我在网上查了一下,找到了这篇文章。

http://www.eecs.umich.edu/courses/eecs380/handouts/cppbinaryfileio - 2. - html

#include <fstream>
#include <iostream>
int main()
{
    int testVar = 71;
    std::ofstream outputFile;
    outputFile.open("C:/binary.dat", std::ios::out | std::ios::binary);
    outputFile.seekg(0);
    outputFile.write(&testVar, sizeof(testVar));
    outputFile.close();
}

我从文章中理解的是,第一个参数是一个空指针?这意味着它可以接受任何类型?但是当我输入它的时候,智能感知告诉我没有重载并且第一个参数的类型是char*

我是否使用了错误的头或旧的c++版本??

这里真的需要一些帮助。谢谢!

我不熟悉函数的开发历史。因此,我不能评论为什么参数的类型是char*而不是void*

要解决你的问题…

你可以使用:

outputFile.write(reinterpret_cast<char*>(&testVar), sizeof(testVar));

在使用istream::read()的同时也使用reinterpret_cast

您实际上只需要像前面所说的那样将其强制转换为char*,但是代码中存在其他问题。Seekg()用于输入流,您正在编写输出文件。如果您想清除这一行,只需使用trunc.

打开文件。
#include <fstream>
#include <iostream>
int main()
{
    int testVar = 71;
    std::ofstream outputFile("C:/binary.dat", std::ios::out | std::ios::binary | std::ios::trunc);
    outputFile.write((char*)&testVar, sizeof(testVar));
    outputFile.close();
}

第一个参数为char*char的大小为1字节,表示字节数据,char*表示数据块。

因此,当写入原始二进制数据时,数据作为char*和块的大小传递。

我是否使用了错误的头或旧的c++版本??

不,这不是问题,它是char*,而不是void*作为参数。

seekg()成员函数用于输入流。我认为你需要的功能是seekp()

相关内容

最新更新