我目前正在嘗試編寫一次讀取兩個文件一個字節的程序(是的,我意識到繁重的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
「多於一個字節」只是一個字節序列。 –