【问题标题】:Botan pipe failbit exceptionBotan 管道故障位异常
【发布时间】:2017-11-07 08:59:47
【问题描述】:

当我按照 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。

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

【问题讨论】:

    标签: c++ botan


    【解决方案1】:

    这就是 C++ 输入流的工作方式;当尝试通过 EOF 进行读取时,failbit and eofbit are set

    我们可以从记录在案的 Botan 代码中看到 operator&gt;&gt; will throw an exception if only failbit is set after extraction is attempted;简而言之,您在这里无需担心。计算机只是告诉您您消耗了所有输入数据1


    1 这不仅仅是严格意义上的 eofbit 的意思,而是 Botan 的 operator&gt;&gt; 的工作方式(尽可能多地阅读)需要尝试读取 EOF;否则,它不知道什么时候停止!

    【讨论】: