C++ 以二进制形式读取文件-循环永不结束
我使用下面的代码打开一个文件,逐字符读取字符,并获得十六进制的字符数。问题是循环永远不会结束。怎么了 file>>x是否等同于x=file.getC++ 以二进制形式读取文件-循环永不结束,c++,C++,我使用下面的代码打开一个文件,逐字符读取字符,并获得十六进制的字符数。问题是循环永远不会结束。怎么了 file>>x是否等同于x=file.get ifstream file; file.open(argv[1], ifstream::in|ifstream::binary); if (file.is_open()) { unsigned char x; file >> std::noskipws; while
ifstream file;
file.open(argv[1], ifstream::in|ifstream::binary);
if (file.is_open())
{
unsigned char x;
file >> std::noskipws;
while (file >> x) {
stringstream s;
s << std::hex << std::setw(2) << std::setfill('0')
<< (int)x;
std::cout << s.str();
}
file.close();
}
你如何确定循环永远不会结束?看起来一点也没错。你是复制粘贴还是从内存中输入的?对于你来说,重新键入有一种消除bug的好方法。我已经为一个1mb文件运行了代码,它永远不会停止打印元素。我刚刚从VisualStudio复制了代码。实际上,我已经等了2分钟才在新的测试中打印文件1MB的每个字节。我应该读取一个块并在一个内部循环中执行十六进制函数吗?一个1 MB的文件不是一个很好的测试用例-使用一个小的,只有几个字符的字符串,你可以立即识别,这样你就知道输出是正确的。而且你浪费了很多时间为每个角色构建一个字符串流。只需将输出直接发送到std::cout。首先尝试最简单的方法。如果速度太慢,就做复杂的事情。如果这不起作用,再问一次。