将二进制文件读入uint32_t的向量

时间:2019-03-09 01:44:23

标签: c++ vector io binaryfiles

有一个二进制文件words.bin,其中包含多个4个字节的整数。我想将它们从文件中读取到相应大小的std::vector的{​​{1}}中。这是我首先尝试的方法:

uint32_t

但是,我收到此错误消息:

#include <fstream>
#include <iterator>
#include <vector>
#include <cstdint>

int main(int argc, char* argv[])
{
    std::ifstream f("words.bin", std::ios::in | std::ios::binary);
    std::vector<uint32_t> wordvec(std::istreambuf_iterator<uint32_t>{f}, {});

    return 0;
}

如果我将u32vec.cpp: In function 'int main(int, char**)': u32vec.cpp:9:71: error: no matching function for call to 'std::istreambuf_iterator<unsigned int>::istreambuf_iterator(<brace-enclosed initializer list>)' std::vector<uint32_t> wordvec(std::istreambuf_iterator<uint32_t>{f}, {}); 都更改为uint32_t,它确实可以工作,但这不是我想要的。

我的第二次尝试是显式编写大括号表示法,但是随后访问char的方法将产生语法错误。这是代码:

std::vector

这是编译器的输出:

#include <fstream>
#include <iterator>
#include <vector>
#include <cstdint>

int main(int argc, char* argv[])
{
    std::ifstream f("words.bin", std::ios::in | std::ios::binary);
    std::vector<uint32_t> wordvec(std::istreambuf_iterator<uint32_t>(f), std::istreambuf_iterator<uint32_t>());

    wordvec.at(0);

    return 0;
}

这是u32vec.cpp: In function 'int main(int, char**)': u32vec.cpp:11:13: error: request for member 'at' in 'wordvec', which is of non-class type 'std::vector<unsigned int>(std::istreambuf_iterator<unsigned int>, std::istreambuf_iterator<unsigned int> (*)())' wordvec.at(0); ^~ 的输出:

g++ --version

0 个答案:

没有答案