gpt4 book ai didi

c++ - 将文件读入 std::vector

转载 作者:太空狗 更新时间:2023-10-29 20:34:21 25 4
gpt4 key购买 nike

我正在尝试将二进制格式的文件读入 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/

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