【发布时间】:2014-07-18 21:10:03
【问题描述】:
我想拿两个文件,逐字节比较,然后测试它的性能,
到目前为止,我的代码如下所示:
#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 的按位运算进行检查,有什么想法可以做到这一点吗?
有什么方法可以一次读取一个字节的文件吗?
提前感谢您的帮助!
【问题讨论】:
-
你说的是什么意思"但是我想检查一个文件本身是否有重复"?
-
我有一个想法,有没有一种方法可以一次读取一个字节的文件?对不起,这是一个错字,我只想使用 XOR 逐字节比较两个文件
-
如果两个字节是相同的,那么在执行 XOR 位运算后,结果应该最终为零,但是我在实现这个时遇到了麻烦
-
你真的想打印:“文件是相同的\n”每次一个字节匹配?即,如果您有一个 4 KB 的文件,您将打印此消息 4096 次。我认为答案是否定的。此外,如果您真的对性能感兴趣,那么您将把所有时间都花在打印上,而不是文件的实际比较上。您需要将结果放入 bool 并在函数末尾打印。此外,可能值得一提的是,如果编译器愿意,可以免费使用 XOR 进行相等性检查。您最好的选择通常是编写代码,以便读者清楚您的意图。
-
@Apriori 你是对的,我不想每次都有相同的字节时打印。但是, getc 选项不适用于我想要完成的任务。我只是注意到了。例如,它适用于 char,因为 char 是一个字节,但如果我正在读取带有数字的文件怎么办?它不再是一个字节。关于如何获取数字(例如 int)的任何想法,将其分解为 C 中可能的最低数据类型?谢谢
标签: c hash bit-manipulation xor duplication