【问题标题】:Convert text file into binary file in c在c中将文本文件转换为二进制文件
【发布时间】:2017-02-12 21:52:26
【问题描述】:

所以我需要将文本文件转换成二进制文件。

文本文件格式为-

名字 姓氏 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参数,即size_t fwrite( const void *buffer, size_t size, size_t count, FILE *stream ),尤其是单独提供大小和计数的可能性。
  • 对于firstlast,为什么只记录了1 个字符(fwrite(first, 1, sizeof(char), fout);)?
  • 您的问题到底是什么?请再读一遍"How do I ask a good question?"

标签: c file-conversion


【解决方案1】:

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

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

基于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);

额外:

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

【讨论】:

  • 谢谢,我已经找到了 char 的 strlen,但更改 float/unsigned int 的字节数有帮助
猜你喜欢
  • 1970-01-01
  • 2014-07-29
  • 1970-01-01
  • 2013-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-21
  • 2014-07-30
相关资源
最近更新 更多