用c语言将文本文件转换成二进制文件

用c语言将文本文件转换成二进制文件,c,file-conversion,C,File Conversion,所以我需要把一个文本文件转换成一个二进制文件 中的文本文件格式为- 姓氏姓氏id gpa (字符串无符号整数浮点) 文本文件的一个示例可以是: 乔恩·史密斯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 = f

所以我需要把一个文本文件转换成一个二进制文件

中的文本文件格式为-

姓氏姓氏id gpa (字符串无符号整数浮点)

文本文件的一个示例可以是:

乔恩·史密斯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);
}
在UNIX中使用diff命令,我将输出的二进制文件与二进制文件的外观进行比较

>diff output.bin b1.bin
>Binary Files output.bin b1.bin differ

因此,这一定意味着我的文本文件没有正确地转换为其正确的二进制文件。

提供的源代码显示了对使用
fwrite()
函数在二进制文件中记录数据的误解

错误1要记录字符串,请使用固定大小或实际长度

基于两行
fwrite(第一行,1,sizeof(char),fout)
fwrite(last,1,sizeof(char),fout)

使用:

或:

错误2-要仅记录一个
无符号整数
,请使用1个元素

基于行
fwrite(&x,4,sizeof(unsigned int),fout)

使用:

错误3-要记录一个
浮点值
,请使用正确的
sizeof()

基于行
fwrite(&y,4,sizeof(int),fout)

使用:

额外:

在所有情况下,当使用
fwrite()
时,不要忘记检查返回的 值(必须等于写入的元素数)


提示:检查
fwrite
参数,即
size\u t fwrite(const void*buffer,size\u t size,size\u t count,FILE*stream)
,特别是可以分别提供大小和计数。对于
first
last
,为什么只记录1个字符(
fwrite(first,1,sizeof(char),fout);
)你到底有什么问题?请再读一遍。谢谢,我已经计算出字符的strlen,但是更改float/unsigned int的字节数会有所帮助
fwrite(first, (strlen(first)+1), sizeof(char), fout);
fwrite(first, SIZE, sizeof(char), fout);
fwrite(&x, 1, sizeof(unsigned int), fout);
fwrite(&y, 1, sizeof(float), fout);