如何打印二进制文件

How to print binary file

本文关键字:二进制文件 打印 何打印      更新时间:2023-10-16

我想创建一个二进制文件,其中包含从 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;
}

您的while条件永远不会得到满足。您的第一次(也是唯一一次(读取尝试返回0- 这就是不打印任何内容的原因。

在第一次循环之后,你必须寻找指向第 0 个位置的 "get" 指针,以覆盖后续 "while" 循环中的数字 第二个循环
终止,因为 binfile 的 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;
}