gpt4 book ai didi

c++ - 将二进制文件读入 vector 读取小于完整文件

转载 作者:可可西里 更新时间:2023-11-01 15:08:55 35 4
gpt4 key购买 nike

我有二进制文件,我正试图将其内容读入 vector 。所有文件的大小都相同,但使用我下面的代码,最终 vector 大小总是比文件大小小一点,并且文件之间不同(但每个文件都相同)。我对这里发生的事情感到困惑......

#include <fstream>
#include <vector>
#include <iostream>
#include <iterator>
int main(int argc, char *argv[]) {
std::string filename(argv[1]);

// Get file size
std::ifstream ifs(filename, std::ios::binary | std::ios::ate);
int size = (int)ifs.tellg();
std::cout << "Detected " << filename << " size: " << size << std::endl; // seems correct!

// Load file
ifs.seekg(0, std::ios::beg);
std::istream_iterator<char unsigned> start(ifs), end;
std::vector<char unsigned> v;
v.reserve(size);
v.assign(start, end);

std::cout << "Loaded data from " << filename << ", with " << v.size() << " elements" << std::endl;
}

在文件上尝试这个,我得到这个:

Detected foo_binary.bin size: 2113753
Loaded data from foo_binary.bin, with 2099650 elements

2113753 数字是以字节为单位的文件的正确大小。

在另一个相同大小的文件上尝试此操作, vector 大小最终将包含 2100700 个元素。多一点,但又不是整个文件。

这是怎么回事?

最佳答案

有多个流迭代器。类模板std::istream_iterator<T>用于格式化输入,也就是说,它将在尝试读取 T 类型的对象之前跳过前导空格.

看样子你想要std::istreambuf_iterator<char>用于遍历文件中的字符,不进行任何跳过。

关于c++ - 将二进制文件读入 vector<char> 读取小于完整文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34443097/

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