C++ 如何打印二进制文件

C++ 如何打印二进制文件,c++,file,C++,File,我想创建一个二进制文件,其中包含0到10的整数。在那之后,我想把每一张都翻一番,然后打印出来。当我运行它时,没有打印任何内容 using namespace std; int main() { fstream binfile("Numbers.dat", ios::in | ios::out | ios::binary); for(int i=0; i<=10; i++) binfile.write((char*)&i, sizeof(i));

我想创建一个二进制文件,其中包含0到10的整数。在那之后,我想把每一张都翻一番,然后打印出来。当我运行它时,没有打印任何内容

using namespace std;

int main()
{
    fstream binfile("Numbers.dat", ios::in | ios::out | ios::binary);
    for(int i=0; i<=10; i++)
        binfile.write((char*)&i, sizeof(i));
    binfile.flush();
    int number;
    while(binfile.read((char*)&number, sizeof(number)))
    {
        number*=2;
        binfile.seekp(binfile.tellg()-sizeof(number));
        binfile.write((char*)&number, sizeof(number));
        binfile.flush();
    }
    binfile.seekg(0);
    while(binfile.read((char*)&number, sizeof(number)))
        cout<<number;
    return 0;
}
使用名称空间std;
int main()
{
fstream binfile(“Numbers.dat”,ios::in | ios::out | ios::binary);

对于(int i=0;i您的
while
条件从未满足。您的第一次(也是唯一一次)读取尝试返回
0
-这就是为什么不打印任何内容。

在第一次循环之后,您必须寻找指向第0位置的“get”指针,以便在随后的“while”循环中覆盖数字
第二个循环终止,因为binfile get集合的eofbit,以下所有输入输出操作都将失效,因此我们必须清除eofbit以重新启动操作

工作代码:

#include <fstream>
#include <iostream>        

using namespace std;

int main()
{
    fstream binfile("Numbers.dat", ios::in | ios::out | ios::binary);
    for(int i=0; i<=10; i++) // 1st loop
        binfile.write((char*)&i, sizeof(i));
    binfile.flush();
    binfile.seekg(0);
    int number;
    while(binfile.read((char*)&number, sizeof(number))) // 2nd loop
    {
        number*=2;
        binfile.seekp(binfile.tellg()-sizeof(number));
        binfile.write((char*)&number, sizeof(number));
        binfile.flush();
    }
    binfile.clear();
    binfile.seekg(0);
    while(binfile.read((char*)&number, sizeof(number))) // 3rd loop
        cout<<number << " ";
    return 0;
}
#包括
#包括
使用名称空间std;
int main()
{
fstream binfile(“Numbers.dat”,ios::in | ios::out | ios::binary);

对于(int i=0;i使用同一个流对象进行输入和输出是很棘手的。首先使用两个单独的流对象,一个用于写入文件,另一个用于读取文件。在工作完成后,您可以尝试将同一个对象同时用于这两个对象。您能告诉我如何修复它吗,我自己真的不知道如何修复它。@Vito--首先删除它
while
循环。然后看看你是否能让代码正常工作。你试图一次做的事情太多了。