读取 .bmp 文件头

reading .bmp file header

我正在尝试读取 .bmp 文件。我成功读取了初始的 B 和 M 字符,但之后我只得到 0,如果写入整数或空白,如果写入字符。 根据 https://en.wikipedia.org/wiki/BMP_file_format 应该有文件的大小,一些保留的字节和我的文件的偏移量。

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
}        

所有这些代码将打印在控制台上是:
0
0
0
为什么我没有得到预期的输出?

您需要进行二进制读取(而不是像您现在所做的那样读取文本)

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

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

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

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

我建议在进一步学习之前先阅读 C++ 中的二进制 I/O。