C++ 将二进制文件读入uint32\u t的向量

C++ 将二进制文件读入uint32\u t的向量,c++,vector,io,binaryfiles,C++,Vector,Io,Binaryfiles,有一个包含多个4字节整数的二进制文件words.bin。我想将它们从文件中读入相应大小的std::vector,即uint32\t。以下是我首先尝试的: #包括 #包括 #包括 #包括 int main(int argc,char*argv[]) { std::ifstream f(“words.bin”,std::ios::in | std::ios::binary); std::vector wordvec(std::istreambuf_迭代器{f},{}); 返回0; } 但是,我收到

有一个包含多个4字节整数的二进制文件
words.bin
。我想将它们从文件中读入相应大小的
std::vector
,即
uint32\t
。以下是我首先尝试的:

#包括
#包括
#包括
#包括
int main(int argc,char*argv[])
{
std::ifstream f(“words.bin”,std::ios::in | std::ios::binary);
std::vector wordvec(std::istreambuf_迭代器{f},{});
返回0;
}
但是,我收到以下错误消息:

u32vec.cpp:在函数“int main(int,char**)”中:
u32vec.cpp:9:71:错误:调用'std::istreambuf_迭代器::istreambuf_迭代器()'时没有匹配的函数
std::vector wordvec(std::istreambuf_迭代器{f},{});
如果我同时将
uint32\t
更改为
char
,它确实可以工作,但这不是我想要的

我的第二次尝试是显式编写花括号表示法,但是访问
std::vector
的方法会产生语法错误。代码如下:

#包括
#包括
#包括
#包括
int main(int argc,char*argv[])
{
std::ifstream f(“words.bin”,std::ios::in | std::ios::binary);
std::vector wordvec(std::istreambuf_迭代器(f),std::istreambuf_迭代器());
wordvec.at(0);
返回0;
}
这是编译器的输出:

u32vec.cpp:在函数“int main(int,char**)”中:
u32vec.cpp:11:13:错误:请求“wordvec”中的成员“at”,该成员属于非类类型“std::vector(std::istreambuf_迭代器,std::istreambuf_迭代器(*)()”
wordvec.at(0);
^~
这是
g++--version
的输出:

g++(x86_64-posix-seh-rev0,由MinGW-W64项目构建)8.1.0
版权所有(C)2018免费软件基金会。
这是自由软件;有关复制条件,请参见源。没有
担保甚至不是为了适销性或适合某一特定目的。

最烦人的parsestream缓冲区迭代器只在
char
s上迭代,其他什么都没有。试图以某种方式将它们转换为其他数据类型上的迭代器将无法按您期望的方式工作,暂时忽略最麻烦的解析问题。一句话:您必须自己提取所有内容,一次提取四个字节。C++不能为你做这件事。STD中的第一段::istrAMBufyItter是一个单遍输入迭代器,它从STD::Basic SyrSubUf对象中读取连续的字符。我大胆地说。看起来C++并不会给你机会在这里用endian来射击你自己。流缓冲迭代器真的只在<代码> char < /代码> s上迭代吗?我粗略地介绍了以下答案,它确实为迭代器和目标向量使用了另一种类型:Update:链接的答案似乎是错误的。谢谢大家的回复。如果你把你的评论放在一个单独的答案中,我很乐意接受。大多数令人烦恼的parsestream buffer迭代器只在
char
s上进行迭代,其他什么都没有。试图以某种方式将它们转换为其他数据类型上的迭代器将无法按您期望的方式工作,暂时忽略最麻烦的解析问题。一句话:您必须自己提取所有内容,一次提取四个字节。C++不能为你做这件事。STD中的第一段::istrAMBufyItter是一个单遍输入迭代器,它从STD::Basic SyrSubUf对象中读取连续的字符。我大胆地说。看起来C++并不会给你机会在这里用endian来射击你自己。流缓冲迭代器真的只在<代码> char < /代码> s上迭代吗?我粗略地介绍了以下答案,它确实为迭代器和目标向量使用了另一种类型:Update:链接的答案似乎是错误的。谢谢大家的回复。如果你把你的意见写进一个单独的答复中,我将欣然接受。