【发布时间】:2015-10-25 19:12:37
【问题描述】:
我需要将无符号长整数值写入文本文件。当我使用 fprintf() 时,它工作得很好,但是需要时间。我已经分析了我的应用程序并且 fprintf() 占用了所有时间的一半。我做了一项研究,发现 fwrite() 比 fprintf() 更有效。但是我不知道怎么用?
我的 fprintf() 代码
fprintf(out, "%llu %llu\n", min, minv);
我的 fwrite() 代码
fwrite(&min,sizeof(unsigned long long int),1, out);
fputs(" ",out);
fwrite(&minv,sizeof(unsigned long long int),1, out);
fputs("\n", out);
fwrite() 第一个更快,但是当我打开文件时,数据就像
¾²ö `àÔàUü
ؾ{4- "¤#sÏ$P
oD/
-5X®Z
在这种情况下如何正确执行 fwrite()?
【问题讨论】:
-
fwrite被称为“正确”。你误解了fprintf和fwrite做不同的事情。fprintf打印字符表示,fwrite打印原始数据。选一个。 (而且我认为您不应该在这里关心输出性能。破坏代码的速度优化毫无价值。) -
尝试用十六进制编辑器打开它。
-
如果您要坚持使用
fwrite(),您首先必须将unsigned long long值转换为字符串——也许使用snprintf()? — 然后使用fwrite()将适当长度的字符串写入文件。当然,使用fprintf()进行格式化和写入要容易得多,但如果你想打败它,那就是你需要做的。如果使用snprintf()不行(它与fprintf()有很多相同的代码),那么你必须编写自己的转换函数;没有将unsigned long long转换为字符串的标准函数。 -
发布
out的打开方式 - 对于正确使用fwrite()至关重要。 -
@chux out = fopen("D:\\output/data.out","w");就这样打开了
标签: c optimization file-io fwrite