【发布时间】:2017-02-12 03:00:22
【问题描述】:
我正在编写一个必须遍历二进制文件并将其写入文本文件的函数。二进制文件的每一行包含
l1 名字 l2 姓氏 ID GPA
例如)玛丽约瑟夫 1234 4.0
其中 l1 和 l2 分别是名字和姓氏的长度,ID 是无符号整数,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 个字节,而不是 3 个字节的 ASCII “4.0”。每个字段与每行末尾的 CR 或 LF 或 CRLF 之间是否有空格?
-
如果您使用的文件是用您之前的帖子中的
fwrite(firstName, strlen(firstName), 1, binfile); fwrite(lastName, strlen(lastName), 1, binfile);编写的,那么这段代码将无法知道一个名称的结尾和另一个名称的开头。需要重新规划该文件的输出。我预计本周末@OP 还会发布第三篇文章。 -
例如,一个二进制文件的记录可能类似于“\0\0\0\x04Mary\0\0\0\x06Joseph\0\0\x04\xd2\x40\ x80\0\0”。它甚至可能有固定大小的名字和姓氏区域。
-
如何打开二进制文件并复制一行?在记事本中,它是一堆乱码和符号。对不起,我是个新手。