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).