我正在尝试使用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
字节?
答案 0 :(得分:16)
打开时您必须指定std::ofstream::binary
。
否则,在Windows文本文件模式下,程序中的\n
(0x0a
)在写入/读取文件时将转换为\r\n
(0x0d 0x0a
)
答案 1 :(得分:6)
您以文本模式打开文件并在Windows上运行。它将0x0d
添加到0x0a
。创建ofstream实例时,需要使用二进制模式。
答案 2 :(得分:4)
该文件正在写入文本到二进制转换的系统上。 i的最低字节中的值10(0A十六进制)被解释为换行符(又名换行符),并被转换为回车换行序列(13 10十进制,0D 0A十六进制)。
要解决此问题,请按以下步骤更改代码段的第一行:
std::ofstream in("testout", std::ios::binary);
这将指示C ++运行时库将文件视为二进制文件,而不是在换行符和回车换行序列之间执行任何字节转换。