我在弄清楚如何正确地将这个值写入文件时遇到了一些麻烦。我在互联网上做了一些研究,发现了这篇文章。
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();
}
我从文章中了解到,第一个参数是一个void指针?这意味着它会接受任何类型?但是当我输入它时,intelisense说没有重载,第一个参数需要类型char *。
我使用错误的标题或旧的C ++版本的东西?
真的可以在这里使用一些帮助。谢谢!
我不熟悉功能开发的历史。因此,我不能评论为什么参数是char*
类型而不是void*
。
解决你的问题......
您可以使用:
outputFile.write(reinterpret_cast<char*>(&testVar), sizeof(testVar));
使用reinterpret_cast
时也使用istream::read()
。
你真的只需要将它转换为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*
。大小为1字节的char
表示逐字节数据,char*
表示数据块。
因此,在写入原始二进制数据时,数据将作为char*
和块的大小传递。
我使用错误的标题或旧的C ++版本的东西?
不,这不是问题,因为它是char*
而不是void*
被视为参数。
注意seekg()成员函数用于输入流。我认为你需要的功能是seekp()