gpt4 book ai didi

c - 顺序逐字节比较

转载 作者:行者123 更新时间:2023-11-30 21:03:27 26 4
gpt4 key购买 nike

如何使用异或按位运算在 c 中执行逐字节比较?比较两个文件时

#include<stdio.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);

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

if ( fp1 == NULL )
{
printf("Cannot open %s for reading ", fname1 );
exit(1);
}
else if (fp2 == NULL)
{
printf("Cannot open %s for reading ", 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 );
}
return(0);
}

我收到以下警告,然后当我运行时它说我的 test2.txt 为空,但其中有数据?

hb@hb:~/Desktop$ gcc -o check check.c
check.c: In function ‘main’:
check.c:21:8: warning: incompatible implicit declaration of built-in function ‘exit’ [enabled by default]
check.c:26:8: warning: incompatible implicit declaration of built-in function ‘exit’ [enabled by default]
hb@hb:~/Desktop$


hb@hb:~/Desktop$ ./check
Enter name of first file :test1.txt
Enter name of second file:test2.txt
Cannot open test2.txt for reading hb@hb:~/Desktop$

有什么想法吗?

最佳答案

有很多方法可以做到这一点,如果您并排放置两个文件,最简单的方法就是并排读取它们并比较缓冲区。

#define BUFFERSIZE 4096
FILE *filp1, *filp2;
char *buf1, *buf2;
bool files_equal;
int read1, read2;


filp1 = fopen("file1", "rb");
filp2 = fopen("file2", "rb");

// Don't forget to check that they opened correctly.

buf1 = malloc(sizeof(*buf1)*BUFFERSIZE);
buf2 = malloc(sizeof(*buf2)*BUFFERSIZE);

files_equal = true;

while ( true ) {
read1 = fread(buf1, sizeof(*buf1), BUFFERSIZE, filp1);
read2 = fread(buf2, sizeof(*buf2), BUFFERSIZE, filp2);

if (read1 != read2 || memcmp( buf1, buf2, read1)) {
files_equal = false;
break;
}
}

如果读取文件时发生错误,您可能会得到一些漏报,但您可以为此添加一些额外的检查。

另一方面,如果您的文件位于两台不同的计算机上,或者您想要处理大量文件并找出其中是否有相同的文件。最好的方法是使用校验和。

良好的校验和来自良好的哈希函数。根据您的安全要求,常见实现使用:

  • SHA-1、SHA-2 或 SHA-3
  • MD5

还存在许多其他的。 Wiki

关于c - 顺序逐字节比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24790777/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com