读取二进制文件并解释为整数

问题描述 投票:0回答:2

我正在尝试将二进制文件解释为一系列整数,并将值读取为向量。但是,行[[ifs >> n;始终返回0,并且eof始终为false,文件位置不会更新。如果我将类型更改为char,那么它可以工作,但这不是想要实现的。如何使代码按我的意愿工作?

int readAsNumber(const char* fileName, vector <int> &content) { ifstream ifs; int n; ifs.open(fileName, ifstream::in | ifstream::binary); while (ifs.eof() == false) // Never terminates { ifs >> n; // Always sets n = 0 content.push_back(n); // Saves 0 } ifs.close(); return 0; }
c++ ifstream
2个回答
0
投票
输入运算符>>读取输入并将其解释为

文本。

如果文件包含原始二进制数据,您还需要read作为原始数据:

int value; while (ifs.read(reinterpret_cast<char*>(&value), sizeof value)) content.push_back(value);

请记住,这样存储原始二进制数据是不可移植的,并且实际上不建议这样做。

0
投票
ifs >> n尝试将整数读取为文本-模式对此无效。(binary标志或多或少只影响换行符的解释。)

ifs >> n失败时,ifs进入错误状态,并且永远不会到达终点。如果您使用更合适的格式while (ifs >> n),您将(可能)立即失败并且永远不会进入循环。

如果您不想阅读文本,请不要使用格式化的提取运算符,而要使用二进制输入功能。

例如,

void readAsNumber(const std::string& fileName, vector <int> &content) { ifstream ifs(fileName, ifstream::binary); int n = 0; while (ifs.get(reinterpret_cast<char*>(&n), sizeof(n)) { content.push_back(n); } }

© www.soinside.com 2019 - 2024. All rights reserved.