2016-08-21 123 views
-2

我在搞清楚如何正确地将这个值写入文件时遇到了一些问题。我在网上做了一些研究,发现了这篇文章。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(); 
} 

我从文章中了解什么是第一个参数是一个空指针?这意味着它会接受任何类型?但是当我输入时,intelisense说没有重载,第一个参数需要char *类型。

我使用了错误的头文件还是来自较旧的C++版本?

这里真的可以使用一些帮助。 谢谢!

+0

我不知道你究竟在问什么? –

+0

这是关于outputFile.write()参数以及我从文章中拿出的内容。我正在寻找使用二进制输出将整数写入文件。 –

+3

您可以在http://en.cppreference.com/w/cpp/io/basic_ostream/write中看到文档和示例 – Loreto

回答

0

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

为您解决问题...

您可以使用:在使用istream::read()

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

使用reinterpret_cast也。

0

你真的只需要将它转换为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(); 
} 
0

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

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

我是使用错误的头文件还是来自较旧的C++版本?

不,它不是问题,因为说是char*,而不是void*被作为论据。

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