c中文本模式和二进制模式的区别

时间:2012-12-03 02:52:21

标签: c file-io

在文本模式下写入/读取文件时,新行字符被转换为回车符和换行符,即\ n \ n \ n \ n \ n \ n \ n \ n \ n \ r \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n 同样,ASCII值26将以文本模式写入文件末尾,但这不会以二进制模式发生。

我知道这个问题早先在SO中提出过,但我没有找到任何这种行为的理由。

我的意思是,这种行为只是为了区分文本和二进制模式,还是有这种转换的任何特定原因,而不是在二进制模式下写入ASCII值。

3 个答案:

答案 0 :(得分:5)

从某种意义上说,二进制模式是“原始的”:没有任何内容被翻译,因为它没有基础。而在文本模式下,文件被解释为文本,因此(例如)行结尾被转换为适当的表示。

答案 1 :(得分:4)

文本文件处理取决于操作系统。根本不处理二进制文件。 Windows,用CR + LF替换行结尾,在Linux中,OSX用LF替换。在Linux中,当涉及OS时,文本文件和二进制文件处理之间没有区别。

答案 2 :(得分:0)

mode修饰符翻译模式 t在文本(翻译)模式下打开。 b以二进制(非翻译)模式打开;禁止涉及回车和换行符的翻译。