直接上代码:
#include <stdio.h>
#include <math.h>
int CompareBinFile(char *path, char *path2);
void Usage()
{
printf("Usage: bincmp.exe file1 file2\n");
}
void main(int argc, char *argv[])
{
if (argc < 3)
{
Usage();
return;
}
int diff = CompareBinFile(argv[1], argv[2]);
printf("result is %d\n", diff);
}
/*
compare two binary file byte by byte.
return value: the number of different bytes.
0 means they are the same.
-1: can't open file1
-2: can't open file2
>0, different bytes.
<-100: different sizes for two files
*/
int CompareBinFile(char *path, char *path2)
{
int diff = 0;
int len1 = 0;
int len2 = 0;
FILE *f1 = fopen(path, "rb");
FILE *f2 = fopen(path2, "rb");
do
{
if (f1 == NULL || f2 == NULL) break;
if (fseek(f1, 0, SEEK_END) != 0) break;
if (fseek(f2, 0, SEEK_END) != 0) break;
len1 = ftell(f1);
len2 = ftell(f2);
rewind(f1);
rewind(f2);
for (int i = 0; i < len1 && i < len2; i++)
{
if (fgetc(f1) != fgetc(f2))
{
diff++;
printf("diff pos: %d\n", i + 1);
}
}
} while(0);
if (f1 != NULL)
{
fclose(f1);
}
else
{
diff = -1;
}
if (f2 != NULL)
{
fclose(f2);
}
else
{
diff = -2;
}
if (diff > 0 || diff < 0) return diff;
diff = -abs(len1 - len2);
if (diff == 0) return diff;
return diff - 100;
}