Детектор PNG файла С++

Рейтинг: -2Ответов: 1Опубликовано: 15.01.2023

Стоит задача написать программу, которой дается файл, а она определяет 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Принят

Да все нормально получается... Я натравил ваш код на реальный 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";