亲们,这是我从网上拿来的一个例子,为了便于理解,我稍微修改了一下,'wb'改为'w','bin'改为'txt'。
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE * fp;
int x = 0, i = 0;
fp = fopen ("TestFile.txt", "w");
for(i=0; i<10 ;i++) {
x = i;
fwrite(&x,sizeof(int),1,fp);
};
fclose(fp);
return(0);
}
这里到底发生了什么? 1 'w' 表示我想写入文本文件。 2 里面存放的是二进制格式。 问题 1 和 2:扩展名在这里没有任何意义,'w' 是否定义它是一个文本文件,即使内部数据是二进制的?
3 我试图将 4 个字节存储在一个接受 1 个字节的文件中并将其转换为二进制文件的事实?
我知道我可以用这种方式创建纯文本。
char y = i + '0';
fwrite(&y,sizeof(char),1,fp);
4 有人真的以纯文本形式存储数字吗?如何,最好的方法是什么? 提前致谢。
问题1&2:扩展名在这里没有任何意义,
正确。
是定义它是文本文件的“w”,即使内部数据是二进制的?
与
w
相反的wb
意味着它是作为文本文件打开的,是的。其影响取决于系统,但比您预期的要低。在 Linux 和 MacOS 上,两者之间没有实际区别。在 Windows 上,我知道的唯一区别是系统会自动在内部换行符和外部回车/换行符对之间进行转换。从历史上看,也许仍然是今天,有些系统的差异更为显着。
在您的情况下,您在文件中获得了原始二进制数据,因为您使用用于该目的的 I/O 函数 (
fwrite
) 编写它。如果你想在你的文本文件中格式化文本然后使用fprintf()
来写它,或者把它格式化成字符串中的文本格式然后写那个。
3 我试图将 4 个字节存储在一个接受 1 个字节的文件中并将其转换为二进制文件的事实?
我不确定你的意思,但你在文件中获取二进制数据,因为这就是
fwrite()
所做的。
4 有人真的用纯文本存储数字吗?
是的,这很常见。有多种方法可以做到这一点;见上面两个。
区分您编写的是“文本”格式还是“二进制”格式的主要因素是您调用的函数。其他一切都是次要的。
如果你打电话
fwrite(&x, sizeof(int), 1, fp);
然后您正在编写二进制表示:通常为 2 或 4 个字节,采用紧凑的二进制形式,非 人类可读格式。
另一方面,如果你打电话
fprintf(fp, "%d\n", x);
然后你正在写一个漂亮的,人类可读的“文本”格式,用尽可能多的数字字符来表示数字
x
.
一般来说,如果你调用
fwrite
,那么你应该打开文件模式"wb"
fwrite
例子).
通常,如果您调用
fwrite(&y, sizeof(char), 1, fp)
,那么您应该已经打开了文件模式fprintf
(尽管否则不会出错)。
你使用的文件名和扩展名完全由你决定:C不看那些,C不关心。
似乎您认为其中之一
使用
"w"
"w"
命名文件
"wb"
.txt
可能会以某种方式改变 .bin
DWIM
”功能。