C 标准库stdio.h
,我读到要输出 ASCII/文本数据,应该使用模式"w"
,要输出二进制数据,应该使用 "wb"
。但为什么会有差异呢?
无论哪种情况,我只是输出一个字节(字符)数组,对吧?如果我在ASCII模式下输出非ASCII字节,程序仍然输出正确的字节。
某些操作系统(通常名为"Windows")不能保证它们会完全按照您传入的方式读取和写入 ASCII。因此,在窗口上,它们实际上将 \r 映射到 。这在读取和写入 ascii 时是精细和透明的。但它会丢弃二进制数据流。基本上,如果您希望Windows完全按照您传入的方式忠实地读取和写入文件,请始终给窗口"b"标志。
在 ASCII 中输出时可能会发生某些转换(例如,当输出的字符为换行符时输出 neline+回车符) - 具体取决于您的平台。 使用二进制格式时不会发生此类转换