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