关于C#:读取.bmp文件头

reading .bmp file header

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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 <<"\
;
    }
    file.close
}

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


您需要进行二进制读取(不是像您现在正在执行的文本)

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

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

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

此外,您可能需要更正数字以确认其耐力。

我建议先进行C语言中的二进制I / O读取,然后再进行进一步的操作。