c语言将文本文件转换为二进制文件
Convert text file into binary file in c
所以我需要将文本文件转换成二进制文件。
格式为-
的文本文件
名字姓氏id gpa
(string string unsigned int float)
文本文件的示例可以是:
乔恩·史密斯 32 2.5
乔年轻 12 3.4
void textToBinary(char *inp, char *out)
{
FILE *finp;
FILE *fout;
unsigned int x;
float y;
char first[SIZE], last[SIZE];
finp = fopen(inp, "r");
fout = fopen(out, "w");
rewind(finp);
while(1)
{
fscanf(finp, "%s %s %u %f\n", first, last, &x, &y);
fwrite(first, 1, sizeof(char), fout);
fwrite(last, 1, sizeof(char), fout);
fwrite(&x, 4, sizeof(unsigned int), fout);
fwrite(&y, 4, sizeof(int), fout);
if(feof(finp))
{
break;
}
}
fclose(finp);
fclose(fout);
}
在 itsunix 中使用 diff 命令,我将输出的二进制文件与二进制文件的外观进行比较。
>diff output.bin b1.bin
>Binary Files output.bin b1.bin differ
所以这一定意味着我的文本文件没有正确转换为正确的二进制文件。
提供的源代码显示了对使用fwrite()
函数在二进制文件中记录数据的误解。
错误 1 - 要记录字符串,请使用 fixed-size 或实际长度。
基于 fwrite(first, 1, sizeof(char), fout);
和 fwrite(last, 1, sizeof(char), fout);
.
这两条线
使用:
fwrite(first, (strlen(first)+1), sizeof(char), fout);
或者:
fwrite(first, SIZE, sizeof(char), fout);
错误 2 - 只记录一个 unsigned int
,使用 1 个元素。
基于行 fwrite(&x, 4, sizeof(unsigned int), fout);
.
使用:
fwrite(&x, 1, sizeof(unsigned int), fout);
错误 3 - 要记录一个 float
,请使用正确的 sizeof()
.
基于行 fwrite(&y, 4, sizeof(int), fout);
.
使用:
fwrite(&y, 1, sizeof(float), fout);
额外:
In all cases, when using fwrite()
don't forget to check the returned
value (must be equal to the number of elements written).
所以我需要将文本文件转换成二进制文件。
格式为-
的文本文件名字姓氏id gpa (string string unsigned int float)
文本文件的示例可以是:
乔恩·史密斯 32 2.5
乔年轻 12 3.4
void textToBinary(char *inp, char *out)
{
FILE *finp;
FILE *fout;
unsigned int x;
float y;
char first[SIZE], last[SIZE];
finp = fopen(inp, "r");
fout = fopen(out, "w");
rewind(finp);
while(1)
{
fscanf(finp, "%s %s %u %f\n", first, last, &x, &y);
fwrite(first, 1, sizeof(char), fout);
fwrite(last, 1, sizeof(char), fout);
fwrite(&x, 4, sizeof(unsigned int), fout);
fwrite(&y, 4, sizeof(int), fout);
if(feof(finp))
{
break;
}
}
fclose(finp);
fclose(fout);
}
在 itsunix 中使用 diff 命令,我将输出的二进制文件与二进制文件的外观进行比较。
>diff output.bin b1.bin
>Binary Files output.bin b1.bin differ
所以这一定意味着我的文本文件没有正确转换为正确的二进制文件。
提供的源代码显示了对使用fwrite()
函数在二进制文件中记录数据的误解。
错误 1 - 要记录字符串,请使用 fixed-size 或实际长度。
基于 fwrite(first, 1, sizeof(char), fout);
和 fwrite(last, 1, sizeof(char), fout);
.
使用:
fwrite(first, (strlen(first)+1), sizeof(char), fout);
或者:
fwrite(first, SIZE, sizeof(char), fout);
错误 2 - 只记录一个 unsigned int
,使用 1 个元素。
基于行 fwrite(&x, 4, sizeof(unsigned int), fout);
.
使用:
fwrite(&x, 1, sizeof(unsigned int), fout);
错误 3 - 要记录一个 float
,请使用正确的 sizeof()
.
基于行 fwrite(&y, 4, sizeof(int), fout);
.
使用:
fwrite(&y, 1, sizeof(float), fout);
额外:
In all cases, when using
fwrite()
don't forget to check the returned value (must be equal to the number of elements written).