gpt4 book ai didi

c++ - istream_iterator 的初始化导致 ifstream.fail() 被设置

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:52:11 25 4
gpt4 key购买 nike

我正在尝试将大量数据从文件导入到 boost::dynamic_bitset 中。为此,我希望使用与 dynamic_bitset (uint32_t) 的 block 大小相匹配的 istream_iterator。

如下所示,我使用要导入的文件的位置设置我的 ifstream。然而,一旦我用 ifstream 初始化了 istream_iterator,ifstream 的失败位就被设置了。

关于为什么会发生这种情况有什么建议吗?

ifstream memHashes (hashFileLocation, ios::in | ios::binary);
if(memHashes.is_open() == false || memHashes.good() == false) { break; }
std::istream_iterator<uint32_t> memHashesIt(memHashes);
std::istream_iterator<uint32_t> memHashesEOFIt;

根据 cplusplus.com:

failbit is generally set by an input operation when the error was related to the internal logic of the operation itself, so other operations on the stream may be possible. While badbit is generally set when the error involves the loss of integrity of the stream, which is likely to persist even if a different operation is performed on the stream. badbit can be checked independently by calling member function bad.

编辑:

散列包含 160 位散列,由单独的 C 应用程序中的 SHA1 实现生成。此文件中有几千个哈希值。我想读取 5 个 4 字节的 block ,而不是 20 个 1 字节的 block (因此我使用 uint32_t 作为 block 大小)我从 C 应用程序中提取了相关代码,它显示了正在生成的哈希值,然后写入文件:

#define HASH_SIZE 20 // 160 bits / 8 bits per byte = 20 bytes

FILE *fp;
fp = fopen(hash_filename, "wb");
if (!fp) {
MSG("Hash dump file cannot be opened");
fclose(fp);
return NULL;
}

uint8_t *p;
unsigned char hash[HASH_SIZE];
SHA1((unsigned char*)p, LENGTH_TO_HASH, hash);
fwrite(hash, HASH_SIZE, 1, fp);

最佳答案

std::istream_iterator<T>使用输入 operator>>()对于 T 类型的对象.也就是说,它假定格式化输入。在构建时,它会尝试读取可能导致 std::istream 的第一个元素。得到std::ios_base::failbit设置。

关于c++ - istream_iterator 的初始化导致 ifstream.fail() 被设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14542024/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com