0

当我按照 Botan 文档管道/过滤器消息处理中的说明进行操作时,我遇到了意外的故障位错误。

我的代码很简单:

ifstream in("2.txt", ios::binary);
ofstream out("2.enc", ios::binary); 
AutoSeeded_RNG rng;
SymmetricKey key(rng, 16); // a random 128-bit key
InitializationVector iv(rng, 16); // a random 128-bit IV

Pipe pipe(get_cipher("AES-128/CBC/CTS", key, iv, ENCRYPTION), new DataSink_Stream(out));
pipe.start_msg();
in >> pipe;
pipe.end_msg();
cout << in.fail() << endl;

它总是输出 1,因为故障位总是设置为 1。

这是一个错误还是我的代码有问题?

4

1 回答 1

0

这就是 C++ 输入流的工作方式;当尝试通过 EOF 进行读取时,将设置failbiteofbit

我们可以从记录在案的 Botan 代码中看到,如果在尝试提取后仅设置了failbitoperator>> ,则会引发异常;简而言之,您在这里无需担心。计算机只是告诉您您消耗了所有输入数据1


1这不仅仅是最严格意义上的eofbit的含义,而且 Botan 的operator>>作品(尽可能多地阅读)需要尝试阅读 EOF 之后的方式;否则,它不知道什么时候停止!

于 2017-06-06T11:14:23.470 回答