ifstream二进制读/写只需要char *?

问题描述 投票:-2回答:3

我在弄清楚如何正确地将这个值写入文件时遇到了一些麻烦。我在互联网上做了一些研究,发现了这篇文章。

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 ++版本的东西?

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

c++ fstream
3个回答
0
投票

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

解决你的问题......

您可以使用:

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

使用reinterpret_cast时也使用istream::read()


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()

© www.soinside.com 2019 - 2024. All rights reserved.