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); |
其中
此外,您可能需要更正数字以确认其耐力。
我建议先进行C语言中的二进制I / O读取,然后再进行进一步的操作。