我目前正在尝试编写一次读取两个文件一个字节的程序(是的,我意识到繁重的I/O开销),但是我在增加FILE指针。我想编程来比较两个文件逐字节,并且getc不会是一个可行的选项,因为它只能用于字符,因为字符是一个字节。但是,我正在阅读两个文本文件,文本文件可能包含诸如整数,双精度等数字。因此,在这种情况下,我想从int/double的一部分中获取该字节并将其与其他文件进行比较(逐个字节的比较)。一次读取一个字节的两个文件
这是我到目前为止有:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <time.h>
#define BUFFER_SIZE 1
unsigned char buffer1[BUFFER_SIZE];
unsigned char buffer2[BUFFER_SIZE];
int main()
{
FILE *fp1, *fp2;
int ch1, ch2;
clock_t elapsed;
char fname1[40], fname2[40];
printf("Enter name of first file :");
fgets(fname1, 40, stdin);
while (fname1[strlen(fname1) - 1] == '\n')
{
fname1[strlen(fname1) -1] = '\0';
}
printf("Enter name of second file:");
fgets(fname2, 40, stdin);
while (fname2[strlen(fname2) - 1] == '\n')
{
fname2[strlen(fname2) -1] = '\0';
}
fp1 = fopen(fname1, "r");
if (fp1 == NULL)
{
printf("Cannot open %s for reading\n", fname1);
exit(1);
}
fp2 = fopen(fname2, "r");
if (fp2 == NULL)
{
printf("Cannot open %s for reading\n", fname2);
exit(1);
}
elapsed = clock(); // get starting time
/* Read in 256 8-bit numbers into the buffer */
size_t bytes_read1 = 0;
size_t bytes_read2 = 0;
bytes_read1 = fread(buffer1, sizeof(unsigned char), BUFFER_SIZE, fp1);
bytes_read2 = fread(buffer2, sizeof(unsigned char), BUFFER_SIZE, fp2);
printf("%c + in buffer 1\n", *buffer1);
printf("%c + in buffer 2\n", *buffer2);
fclose (fp1); // close files
fclose (fp2);
elapsed = clock() - elapsed; // elapsed time
printf("That took %.4f seconds.\n", (float)elapsed/CLOCKS_PER_SEC);
return 0;
}
我假设缓冲器1和缓冲器是一个字节的内容被读取?我需要将它们转换为数字来比较它们吗?我想我可以做的比较如下
(buffer1^buffer2) == 0
,那么这将意味着他们是平等的基础上,XOR位运算
感谢您的帮助提前
“GETC不会是一个可行的选择” - 你是非常,很困惑。你怎么猜“数字,如整数,双打等”存储在一个文件中? getc获得一个字节,您的fread也是如此,但getc的效率更高。 '(buffer1^buffer2)== 0'与'buffer1 == buffer2'的作用相同,但两者都比较地址,而不是字节。 –
@JimBalter多于一个字节 – humblebeast
“多于一个字节”只是一个字节序列。 –