C 使用异或逐位操作执行逐字节比较
我想取两个文件,逐字节比较,测试它的性能 到目前为止,我的代码是这样的:C 使用异或逐位操作执行逐字节比较,c,hash,bit-manipulation,xor,duplication,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("Ent
#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;
}
#包括
#包括
int main()
{
文件*fp1,*fp2;
int ch1,ch2;
char fname1[40],fname2[40];
printf(“输入第一个文件的名称:”);
获取(fname1);
printf(“输入第二个文件的名称:”);
获取(fname2);
时钟();
fp1=fopen(fname1,“r”);
fp2=fopen(fname2,“r”);
如果(fp1==NULL)
{
printf(“无法打开%s进行读取”,fname1);
出口(1);
}
else if(fp2==NULL)
{
printf(“无法打开%s进行读取”,fname2);
出口(1);
}
其他的
{
ch1=getc(fp1);
ch2=getc(fp2);
而((ch1!=EOF)&&(ch2!=EOF)&&&(ch1==ch2))
{
ch1=getc(fp1);
ch2=getc(fp2);
}
如果(ch1==ch2)
printf(“文件相同\n”);
否则如果(ch1!=ch2)
printf(“文件不相同\n”);
fclose(fp1);
fclose(fp2);
}
printf(“这花费了%d秒。\n”,clock()/CLOCKS\u/SEC);
返回0;
}
这段代码比较两个文件是否相同,但我想通过使用XOR的逐位操作来检查一下,有什么办法吗
有没有办法一次读取一个字节的文件
提前谢谢你的帮助 让代码保持原样并在主循环中更改它怎么样
while( (ch1!=EOF) && (ch2!=EOF) && !(ch1 ^ ch2))
{
ch1 = getc(fp1);
ch2 = getc(fp2);
}
快速提示:您已经在逐字节读取文件
getc()
只从文件中读取一个字符,然后将其存储为int。从getc()
函数的描述:成功后,将返回读取的字符(提升为int值)
您所说的“但我想检查一个文件本身是否有重复”是什么意思?我有一个想法,有没有办法一次读取一个字节的文件?很抱歉,这是一个输入错误,我只想使用XORIf两个相同的字节逐字节比较两个文件,然后在执行XOR逐位操作后,结果应该是零,但我在实现这一点上遇到了问题。是否确实要在每次字节匹配时打印:“文件相同\n”?i、 如果你有一个4KB的文件,你可以将这封邮件打印4096次。我认为答案是否定的。此外,如果你真的对性能感兴趣,那么你将把所有的时间都花在打印上,而不是实际比较文件上。您需要将结果放在bool中,并在函数末尾打印出来。此外,可能值得一提的是,如果编译器愿意,它可以免费使用XOR进行相等性检查。您最好的选择通常是编写代码,以便读者清楚地了解您的意图。@Apriori您是正确的,我不想每次都打印相同的字节。但是,getc选项对于我试图实现的目标不起作用。我只是注意到了。例如,它适用于char,因为char是一个字节,但是如果我正在读取一个带有数字的文件呢?它将不再是一个字节。关于如何将数字(如int)分解为C中可能的最低数据类型,有什么想法吗?谢谢