Детектор PNG файла С++
Стоит задача написать программу, которой дается файл, а она определяет png он или нет. Причем сделать это нужно анализируя внутренности файла, а не просто расширение. Открываю файл в бинарном режиме и через метод read() считываю первые 4 байта. В них содержится сигнатура png файла. Вместо этой самой сигнатуры получаю кашу из символов. Понимаю, что использую текстовое чтение, а не бинарное. Какой метод или функцию нужно применить?
std::ifstream file("C:\\project\\file2.png", std::ios::binary);
char value[4];
file.read(value, sizeof(value));
file.close();
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Да все нормально получается... Я натравил ваш код на реальный PNG-файл, вывел
for(int i = 0; i < 4; ++i) cout << value[i];
и получил нормальную сигнатуру.
Но я бы на вашем месте делал немного не так, а читал четырехбайтное целое число и сравнивал с 0x474E5089... Типа
uint32_t value;
file.read((char*)&value, sizeof(value));
file.close();
if (value == 0x474e5089) cout << "PNG!\n";