这里的代码并不重要,因为我想了解在将字符写入二进制打开模式时通过文本模式打开它时发生了什么的确切想法?
我试着做下一件事:
file.open("muzic.mp3", std::ios::binary);
这是以二进制模式打开muzic文件,然后写下我从另一首歌中获取的字符。 我写的这首歌 - 效果很好......
但如果我做下一件事:
file.open("muzic.mp3");
以文本模式打开它 - 所以当我打开我写的新歌时,我会听到噪音。
那么当我使用每种模式时究竟发生了什么?是什么让两个相同的字符块以不同的模式写入?
答案 0 :(得分:0)
在文本模式和二进制模式下打开文件之间的区别在于某些控制字符,特别是换行符可能需要经过特殊处理。例如,如果您在Windows上打开一个输出文件并通过^(?=[\s\S]*?\bnet\b)
写一个换行符,那么在文本模式下,换行符将扩展为Windows程序喜欢的回车符/换行符对看到行尾。在Linux系统上,什么都不会改变,通常文本和二进制模式在Linux系统上的工作方式相同。在任何情况下,使用二进制模式都不会神奇地将输出更改为不同的格式,行结尾会有所帮助。