读取二进制文件时如何输出?
How to output when reading a binary file?
我已经创建了一个二进制文件,它是"index.dat"。它只包含一个整数列表。我想检查文件中存在的最后一个整数。为此,我将文件指针定位在最后一个整数并读取它。目前,我的文件有从 0 到 4 的整数,但输出始终为 6。
如何解决此问题?
#include<iostream>
#include<fstream>
using namespace std;
int main()
{ int i;
ifstream infile;
infile.open("index.dat",ios::binary|ios::in);
if(infile.is_open())
{ infile.seekg(sizeof(i),ios::end);
infile.read(reinterpret_cast<char*>(&i),sizeof(i));
cout<<i;
}
infile.close();
}
Igor Tandetnik在评论中明确表示:
您正在尝试
sizeof(i)
超过文件末尾的字节。这 当然失败了。后续read
也失败,然后您打印 未初始化的变量。当从末端寻求时,你需要一个否定 抵消。— 伊戈尔·坦德特尼克 18 小时前
所以而不是
infile.seekg(sizeof(i),ios::end);
你需要做类似的事情
infile.seekg(-static_cast<streamoff>(sizeof(i)), ios_base::end);
(streamoff
的强制转换是为了确保我们不会对无符号值应用-
,从而产生非常大的正值。streamoff
已签名,ifstream::off_type
保证streamoff
。
相关文章:
- 递归函数计算序列中的平方和(并输出过程)
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 请解释"函数1(p1,p2,p3);"的输出
- C++:将控制台输出存储在宏中更好吗
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 为什么我的代码在输出中增加了93天
- 如何从void函数输出字符串
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- AES加密到解密未正确输出
- 如何将c++程序的一些输出传递给shell,以便在shell中使用
- 如何将地图<列表<string>、矢量<string>>输出到输出文件?
- 为什么立即输出立即输出
- 该代码将如何工作以及输出的输出是什么
- 以未格式化的输出 c++ 打印输出
- 程序未正确输出到输出文件
- 程序从不输出任何输出
- 代码将无意义输出到输出文件而不是字符串
- NetBeans IDE:"Run Success"输出在输出完成之前发生
- [输入],[输出],[输入,输出]和[输出,重新评估]之间有什么区别?