读取.bmp文件头

时间:2018-01-30 14:03:32

标签: c++ fstream bmp

我试图读取.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
为什么我没有得到预期的输出?

1 个答案:

答案 0 :(得分:1)

你需要做二进制读取(不是你现在正在做的文本)

std::ifstream file("bmp.bmp", std::ios_base::binary);

file.read((char*)&num, sizeof num);

其中num的大小正确(int32_tint16_t)。

此外,您可能需要更正 endianess 的数字。

我建议在继续之前用C ++对二进制I / O进行一些阅读。