如何从二进制流中读取单个字节?
How can I read a single byte from a binary stream?
我有一个二进制文件,我想一次处理一个字节。这是我读取文件第一个字符的内容:
ifstream file("input.dat", ios::binary);
unsigned char c;
file >> c;
但是,当我使用调试器逐步执行此代码时,c
始终具有值 0x00
,尽管文件的第一个(也是唯一一个)字符是 0x0A
。事实上,任何其他字符也完全被忽略。
如何从此文件中读取单个字节?
使用std::istream::get
或std::istream::read
。
char c;
if (!file.get(c)) { error }
int c = file.get();
if (c == EOF) { error }
char c;
if (!file.read(&c, 1)) { error }
最后:
unsigned char c;
if (!file.read(reinterpret_cast<char*>(&c), 1)) { error }
请确认文件存在。在从流中读取之前不检查任何错误。例如,您可以:
ifstream file("input.dat", ios::binary);
if(!file.is_open())
{
throw std::runtime_error("invalid path");
}
你在这里:
#include <fstream>
#include <iostream>
#include <iterator>
int main() {
std::ifstream is("in.dat", std::ios::binary);
if (!is) {
std::cout << "Unable to open file!\n";
}
for (std::istreambuf_iterator<char> beg(is), end; beg != end; ++beg) {
// ...
}
return 0;
}
我有一个二进制文件,我想一次处理一个字节。这是我读取文件第一个字符的内容:
ifstream file("input.dat", ios::binary);
unsigned char c;
file >> c;
但是,当我使用调试器逐步执行此代码时,c
始终具有值 0x00
,尽管文件的第一个(也是唯一一个)字符是 0x0A
。事实上,任何其他字符也完全被忽略。
如何从此文件中读取单个字节?
使用std::istream::get
或std::istream::read
。
char c;
if (!file.get(c)) { error }
int c = file.get();
if (c == EOF) { error }
char c;
if (!file.read(&c, 1)) { error }
最后:
unsigned char c;
if (!file.read(reinterpret_cast<char*>(&c), 1)) { error }
请确认文件存在。在从流中读取之前不检查任何错误。例如,您可以:
ifstream file("input.dat", ios::binary);
if(!file.is_open())
{
throw std::runtime_error("invalid path");
}
你在这里:
#include <fstream>
#include <iostream>
#include <iterator>
int main() {
std::ifstream is("in.dat", std::ios::binary);
if (!is) {
std::cout << "Unable to open file!\n";
}
for (std::istreambuf_iterator<char> beg(is), end; beg != end; ++beg) {
// ...
}
return 0;
}