在c中将文本文件转换为二进制文件

时间:2017-02-12 21:52:27

标签: c file-conversion

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

格式为 -

的文本文件

firstname lastname id gpa (string string unsigned int float)

文本文件的示例可以是:

jon smith 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

所以这必须意味着我的文本文件没有正确转换为正确的二进制文件。

1 个答案:

答案 0 :(得分:0)

提供的源代码显示了使用public class CustomView extends ViewGroup{ public CustomView (Context context) { super(context); init(context); } public CustomView (Context context, AttributeSet attrs) { super(context, attrs); init(context); } public CustomView (Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(context); } @TargetApi(21) public CustomView (Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); init(context); } private void init(Context context) { LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View v = mInflater.inflate(R.layout.review_list_item, this, true); //rest of view initialization } } 函数在二进制文件中记录数据的误解。

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

基于fwrite()fwrite(first, 1, sizeof(char), fout);两行。

使用:

fwrite(last, 1, sizeof(char), fout);

或者:

fwrite(first, (strlen(first)+1), sizeof(char), fout);

错误2 - 只记录一个fwrite(first, SIZE, sizeof(char), fout); ,使用1个元素。

基于第unsigned int行。

使用:

fwrite(&x, 4, sizeof(unsigned int), fout);

错误3 - 要记录一个fwrite(&x, 1, sizeof(unsigned int), fout); ,请使用正确的float

基于第sizeof()行。

使用:

fwrite(&y, 4, sizeof(int), fout);

<强>附加

  

在所有情况下,使用fwrite(&y, 1, sizeof(float), fout); 时请勿忘记检查退回的内容   value(必须等于写入的元素数)。