std :: ofstream :: write添加了字符

时间:2014-02-24 08:45:32

标签: c++ ofstream

我正在尝试使用std::ofstream::write方法编写二进制文件。我发现,有些字符不是按原样编写的,例如:

std::ofstream in("testout");
int i =10;

in.write((const char *)(&i), sizeof(i));
in.close();

return 0;

会将以下内容写入二进制文件:0d 0a 00 00 00 为什么会出现额外的0d字节?

3 个答案:

答案 0 :(得分:16)

打开时您必须指定std::ofstream::binary

否则,在Windows文本文件模式下,程序中的\n0x0a)在写入/读取文件时将转换为\r\n0x0d 0x0a

答案 1 :(得分:6)

您以文本模式打开文件并在Windows上运行。它将0x0d添加到0x0a。创建ofstream实例时,需要使用二进制模式。

答案 2 :(得分:4)

该文件正在写入文本到二进制转换的系统上。 i的最低字节中的值10(0A十六进制)被解释为换行符(又名换行符),并被转换为回车换行序列(13 10十进制,0D 0A十六进制)。

要解决此问题,请按以下步骤更改代码段的第一行:

std::ofstream in("testout", std::ios::binary);

这将指示C ++运行时库将文件视为二进制文件,而不是在换行符和回车换行序列之间执行任何字节转换。