##C++判断png文件是否合法
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include<iostream>
typedef unsigned char uchar;
bool compare10(uchar* buffer);
bool compare16(uchar* buffer);
int main()
{
FILE* fp;
fp = fopen("1.png", "rb");
if(fp==NULL)
printf("fail to open the file! \n");
else {
fseek(fp, 0, SEEK_END);
int size = ftell(fp);
fseek(fp, 0, SEEK_SET);
uchar* buffer = new uchar[size];
fread(buffer, 1, size, fp);
if (compare16(buffer))
printf("ok\n");
else
printf("error\n");
fclose(fp);
delete[]buffer;
}
return 0;
}
bool compare10(uchar* buf) {
uchar comparr10[8] = { 137,80,78,71,13,10,26,10 };
bool flag= true;
for (int i = 0; i < 8; i++) {
if (buf[i] != comparr10[i]) {
flag=false;
break;
}
}
return flag;
}
bool compare16(uchar* buf) {
uchar comparr16[8] = { 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a };
bool flag = true;
for (int i = 0; i < 8; i++) {
if (buf[i] != comparr16[i]) {
flag = false;
break;
}
}
return flag;
}