我正在尝试使用std::ofstream()编写UTF-16编码的文件。即使在二进制模式下,将"\n\0"编写为"\r\n\0"。样例代码:

std::string filename = ...
std::ofstream fout(filename, std::ios_base::binary);
fout.write("\xff\xfe", 2);
fout.write("\n\0", 2);
fout.close();

生成的文件的十六进制数据为:
ff fe 0d 0a 00

我一定做错了什么。有什么想法可以防止写入0x0d吗?

我正在使用MS VisualStudio 2013。

更新:莫名其妙地开始按预期方式工作。将其粉笔化成机器中的鬼影。

最佳答案

您发送了4个字节以进行输出。在输出中观察到5个。

您以某种方式不使用二进制模式。没有其他方法可以使用.write(buf,2)和.write(buf,2)并获得5个字节的输出。

可能是,在弄乱/玩弄事物时(就像人们总是想找出奇怪行为的原因一样),您所做的更改实际上导致了二进制模式的断言。

如果您先前尝试输出到STDOUT或STDERR,则Windows很有可能会自动将'\r'添加到流中,因为STDOUT和STDERR几乎都是文本,这可能会覆盖您尝试将其放入二进制模式。 (不,真的。不,您使用的是Visual Studio,这是真的。是的,如果您使用cygwin,则不正确,但您使用的是VS。)

关于c++ - std::ofstream即使在二进制模式下也会写入\r,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32340055/

10-15 06:51