한 번에 한 바이트 씩 두 개의 파일을 읽는 프로그램을 작성하려고합니다. (예, I/O 오버 헤드가 큽니다.)하지만 파일을 늘리는 데 문제가 있습니다. 바늘. 두 파일을 바이트 단위로 비교하는 프로그램을 만들고 싶습니다. getc는 chars가 1 바이트이기 때문에 chars에서만 작동 할 수있는 가능한 옵션이 아닙니다. 그러나 두 개의 텍스트 파일에서 읽고 오전 및 텍스트 파일 int, double 등 같은 숫자를 포함 할 수 있습니다. 따라서 이러한 시나리오에서 int/double 부분에서 해당 바이트를 잡고 다른 파일을 비교할 싶습니다. (순차적 인 byte-by-byte 비교).한 번에 두 바이트 씩 읽음
#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;
}
내가 읽고있는 하나의 바이트의 내용입니다 buffer1와 buffer2를 가정입니다 : 여기
는 지금까지이 무엇인가? 그들을 비교하기 위해 번호로 변환해야합니까? 내가
(buffer1^buffer2) == 0
을 다음과 같이 내가 비교를 할 수있는 생각하는 것은 그런 다음 그들이
는 "getc 그룹은 실행 가능한 옵션이되지 않을 것"동일하지 - 당신은 아주이다, 매우 혼란. int, double 등의 숫자를 어떻게 생각하십니까? 파일에 저장되어 있습니까? getc는 바이트를 얻고 fread를하지만 getc는 훨씬 효율적입니다. '(buffer1^buffer2) == 0'은'buffer1 == buffer2'와 동일하지만 ... 둘다 바이트가 아닌 주소를 비교합니다. –
@JimBalter 두 개 이상의 바이트 – humblebeast
"두 개 이상의 바이트"는 단지 바이트 시퀀스입니다. –