我正在尝试将二进制格式的文件读入 std::vector<std::byte>
std::ifstream fStream(fName, std::ios::binary);
std::vector<std::byte> file_content((std::istreambuf_iterator<std::byte>(fStream)),
std::istreambuf_iterator<std::byte>());
但我收到此错误(对我来说这看起来像 istreambuf_iterator
缺少 std::byte
的重载)
error: no matching function for call to ‘std::istreambuf_iterator<std::byte>::istreambuf_iterator(std::ifstream&)’
std::vector<std::byte> file_content((std::istreambuf_iterator<std::byte>(fStream)),
我做错了什么吗?如果是,最好的方法是什么?
谢谢!
最佳答案
I'm trying to read a file in binary format into a
std::vector<std::byte>
您正在使用 std::istream_iterator
, 从 std::istream
中读取使用 operator>>
,默认执行格式化读取而不是二进制读取。使用 std::istream::read()
读取二进制数据。
如果你想使用std::istring_iterator
要读取字节,您需要定义自定义 operator>>
那叫std::istream::read()
或 std::stream::get()
.但这会很低效,因为它会一次读取 1 个字节。最好调用read()
直接一次读取多个字节的 block 。比如查询文件大小,预分配std::vector
到那个尺寸,然后 read()
来自 std::ifstream
直接进入std::vector
对于那个尺寸。
更新:我刚刚注意到您正在使用 std::istreambuf_iterator
而不是 std::istream_iterator
. std::istreambuf_iterator
不使用 operator>>
,所以它更适合读取字节。但是,它仍然一次读取 1 个字节,所以我所说的使用 std::istream::read()
一次读取多个字节仍然适用。
关于c++ - 将文件读入 std::vector<std::byte>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48964928/