【问题标题】:Not all bytes are showing while reading a file in c++ [duplicate]在 C++ 中读取文件时并非所有字节都显示 [重复]
【发布时间】:2021-09-19 03:18:14
【问题描述】:

我正在尝试读取包含二进制 mod 中数据的文件。该文件的大小为 28 字节,但当我尝试读取此文件时,我只有 22 字节。我已经尝试修改文件中的信息,但它仍然缺少一些字节。我不知道为什么。 PS:我知道文件中包含哪些数据,但它们在任何类型的计算机字符编码标准中都不可读。 用于读取文件的代码:

std::string line{ "" };
    std::string buffer;
    while (std::getline(file, line))
        buffer += line;
    file.close();

【问题讨论】:

  • 如果你的数据是二进制的,你可能不想这样读取它,尤其是如果你的操作系统是 MS Windows。
  • 您正在尝试将二进制数据作为文本读取,但这是行不通的。 Google 获取有关如何读取二进制文件的示例,或咨询good c++ book
  • 我想读取所有的二进制数据,因为是我把它们放进去的。所以如果我能完全恢复它们就更好了(必须的)
  • 它适用于std::vector<unsigned char> buffer(std::istreambuf_iterator<char>(file), {}); 谢谢(我有正确的字节数)

标签: c++


【解决方案1】:

不要像文本那样读取二进制数据。 如果您想将二进制数据读入缓冲区(例如,将其加载到 std::vector),这里有一个使用 stdlib 的方法:

#include <cstdio>
#include <cstdlib>
#include <vector>

FILE *f = fopen("myfile.bin", "rb");
if (f == nullptr) { /* ... */}
fseek(f, 0, SEEK_END);
auto size = ftell(f);
fseek(f, 0, SEEK_SET);
std::vector<uint8_t> buffer(size);
if (fread (buffer.data(), 1, size, f) != size) { /* ... */ }
fclose(f);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-20
    • 2020-03-01
    • 2020-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多