【问题标题】:Reading from binary file to vector.c++从二进制文件读取到vector.c++
【发布时间】:2020-07-14 18:40:20
【问题描述】:

如何从二进制文件(字节,在C++中也称为无符号char)读取到向量,跳过第一个数字为无符号int 32,因为第一个值也是向量的大小?

第一个值也是整个文件的大小。

【问题讨论】:

  • 互联网上有一百万个教程和一百万个关于堆栈溢出的问题,处理文件 I/O 和在向量中存储元素。请使用搜索功能查找相关问题,然后向我们展示一些您遇到问题的代码。
  • @JohnFilleau 我只是不知道如何跳过二进制文件中的第一个元素。
  • 但是你真的应该将前 4 个字节作为 32 位 uint 读取并使用它来保留向量中的空间。 en.cppreference.com/w/cpp/container/vector/reserve
  • 是的,我使用那个值,vector.resize(value)。但是剩下的我要推入vector,谢谢你之前的评论!

标签: c++ file vector binary


【解决方案1】:

你可以试试这样的:

uint32_t data_size = 0;
data_file.read((char *) &data_size, sizeof(data_size));
std::vector<uint8_t> data(data_size);
data_file.read((char *) &data[0], data_size);

上面的代码片段首先从文件中读取数据的大小或数量。
使用读入的数量值创建 std::vector
最后,将数据读入向量中。

编辑 1:内存映射文件
您可能需要考虑将数据文件作为 内存映射 文件打开。这是操作系统将文件视为内存的地方。您不必将数据存储在内存中,也不必将其读入。由于内存映射文件 API 因操作系统而异,因此您必须搜索操作系统 API 以了解如何使用该功能。

【讨论】:

    猜你喜欢
    • 2023-03-13
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-24
    • 2015-07-27
    • 1970-01-01
    相关资源
    最近更新 更多