简单的比较两个二进制文件

直接上代码:

#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;
}

posted @ 2011-03-25 17:40  lightex  阅读(489)  评论(1编辑  收藏  举报