我正在寫一個函數,它必須遍歷二進制文件並將其寫入文本文件。二進制文件的每一行包含
L1姓名L2姓ID GPA
前)瑪麗Joeseph 1234 4.0如何用fread讀取二進制文件()
其中L1和L2是第一個和最後一個名字的長度,分別爲,ID是一個unsigned int和GPA是一個浮點數(每個4個字節)。
如何正確實現循環遍歷二進制文件,直到它到達EOF?目前,由此產生的文本文件大部分是胡言亂語,我該如何解決它?任何幫助表示讚賞。
int binaryToText() //add parameters
{
unsigned char firstName[255];
unsigned char lastName[255];
unsigned int id;
float gpa;
char nLine[]= "\n";
char space[]= " ";
FILE * binfile = fopen("b2.bin", "r"); //Open and read binary file binfile
FILE * textfile = fopen("b2totxt.txt", "w");//Open and write to text file
if(NULL == binfile) //alerts and exits if binfile is not found
{
fprintf(stderr, "Failed to open file\n");
fflush(stderr);
exit(1);
}
fread(&firstName, sizeof(firstName), 1, binfile);
fread(&lastName, sizeof(lastName), 1, binfile);
fread(&id, sizeof(id), 1, binfile);
fread(&gpa, sizeof(gpa), 1, binfile);
printf("%s %s %u %f", firstName, lastName, id, gpa); //test(doesnt come out right)
fprintf(textfile, "%s %s %u %1.1f\n", firstName, lastName, id, gpa);//also flawed
fclose(textfile);
fclose(binfile); //close bin file
return 0;
}
在提出這些問題之前,請至少進行一次谷歌搜索。 –
你可以發佈一個實際的行嗎?如果它是一個二進制文件,推測l1,l2,ID和GPA恰好是4個字節,不像ASCII「3」的3個字節。每行結尾處的CR或LF或CRLF之間是否有空白? –
如果您使用的是用'fwrite(firstName,strlen(firstName),1,binfile)編寫的文件; fwrite(lastname,strlen(lastName),1,binfile);'你以前的文章,這段代碼將無法知道一個名字結束,另一個開始。需要重新計劃該文件的輸出。本週結束時,我預測@OP會發布@OP的帖子。 – chux