将数字写入文件 - 奇怪的结果

时间:2013-05-15 20:50:38

标签: c++ ofstream

运行以下代码:

ofstream newfile(path + "file" + ".hash", fstream::out);
filefl.open(path + "file" + ".hash", fstream::out);
char  a = 10;
filefl<<a;
filefl.close();

生成一个0D 0A的文件(用十六进制编辑器查看)。
a=9包含09的文件时。
sizeof(char)是1.
我的操作系统是win7 x64,代码是通过vs2010 pro运行的。
有人能解释一下吗?

3 个答案:

答案 0 :(得分:2)

看起来流对象会自动将LineFeed(0xA或10)扩展为Windows友好的CarriageReturn-LineFeed对(0xD 0xA)。

答案 1 :(得分:1)

这是设计的。您正在以文本模式打开文件。 Windows在文本模式下将'\n'(0x0A)转换为0D 0A。另外注意不要在这样的文件中写入0x1A(它是文本文件的EOF)。

我不知道文件的用途,但是如果它应该存储二进制数据,那么它应该以二进制模式打开。

答案 2 :(得分:0)

我怀疑你期待它打印&#34; 10&#34;,换句话说,字符串&#39; 1&#39;,&#39; 0&#39;到文件。

但是char通常在C中被解释为字符串的一个字符,而不是数字。数字的通用数据类型是int

所发生的事情是,iostreams函数默认为将char解释为值为10的ASCII字符&#34;换行符&#34;。如果你想实际打印10然后将char更改为int或重写输出行以使用静态强制转换,如下所示:

filefl << static_cast<int>(a);