使用XOR按位运算执行字节比较

时间:2014-07-18 21:10:03

标签: c hash bit-manipulation xor duplication

我想拿两个文件,逐字节比较它们,并测试它的性能,

到目前为止,这就是我的代码:

#include<stdio.h>
#include <time.h>

int main()
{
    FILE *fp1, *fp2;
    int ch1, ch2;
    char fname1[40], fname2[40] ;

    printf("Enter name of first file :") ;
    gets(fname1);

    printf("Enter name of second file:");
    gets(fname2);

    clock();    

    fp1 = fopen( fname1,  "r" );
    fp2 = fopen( fname2,  "r" ) ;

    if ( fp1 == NULL )
    {
        printf("Cannot open %s for reading\n", fname1 );
        exit(1);
    }
    else if (fp2 == NULL)
    {
        printf("Cannot open %s for reading\n", fname2 );
        exit(1);
    }
    else
    {
        ch1  =  getc( fp1 ) ;
        ch2  =  getc( fp2 ) ;

        while( (ch1!=EOF) && (ch2!=EOF) && (ch1 == ch2))
        {
            ch1 = getc(fp1);
            ch2 = getc(fp2);
        }

        if (ch1 == ch2)
            printf("Files are identical\n");
        else if (ch1 != ch2)
            printf("Files are Not identical\n");

        fclose ( fp1 );
        fclose ( fp2 );
    }

    printf("That took %d seconds.\n", clock() / CLOCKS_PER_SEC);

    return 0;
}

这个代码比较两个文件是否完全相同,但是我想通过使用XOR的按位运算来检查,我是如何做到这一点的?

我有什么办法可以一次读取一个字节的文件吗?

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

如何准确地使用您的代码并在主循环中更改它?

 while( (ch1!=EOF) && (ch2!=EOF) && !(ch1 ^ ch2))
 {
    ch1 = getc(fp1);
    ch2 = getc(fp2);
 }

快速注意:您已经逐字节地读取文件。 getc()只从文件中读取一个字符,然后将其存储为int。来自getc()功能的说明:On success, the character read is returned (promoted to an int value)