我试图读取.bmp文件。我成功地读取了最初的B和M字符,但之后我只得到0,如果写成整数或空格,如果写入char。 根据{{3}},应该有文件的大小,一些保留的字节和我的文件的偏移量。
int main(){
std::ifstream file("bmp.bmp");
char token;
int num;
file >> token;
if(token != 'B')
std::cerr << "file is not a .bmp";
file >> token;
if(token != 'M')
std::cerr << "file is not a .bmp";
for(int i = 0; i < 3; i++){
file >> num;
std::cout << num << "\n;
}
file.close
}
所有这些代码将打印在consol上:
0
0
0
为什么我没有得到预期的输出?
答案 0 :(得分:1)
你需要做二进制读取(不是你现在正在做的文本)
std::ifstream file("bmp.bmp", std::ios_base::binary);
file.read((char*)&num, sizeof num);
其中num
的大小正确(int32_t
或int16_t
)。
此外,您可能需要更正 endianess 的数字。
我建议在继续之前用C ++对二进制I / O进行一些阅读。