什么使二进制流与众不同?

3

std::fstream有将流视为二进制而不是文本的选项。它们之间的区别是什么呢?

据我所知,这完全取决于文件在其他程序中如何打开。如果我向二进制流写入A,它只会被转换为01000001(65,即A的ASCII码)- 完全相同的表示方法。这可以在文本编辑器中读作字母“A”,或者在其他程序中读作二进制序列01000001

我是否错过了什么,或者无论流是否被视为二进制都没有任何区别?


5个回答

5
在文本流中,换行符可能会被转换为\n字符;而在二进制流中,则不会发生这种情况。原因是不同的操作系统有不同的约定来存储换行符;Unix使用\n,Windows使用\r\n,旧款Mac使用\r。对于使用文本流的C++程序来说,所有这些都显示为\n

1
你弄反了,特殊的是文本流,具体来说是因为 \n 被翻译成系统中的 \n 或者 \r\n(甚至是 \r),这取决于你的系统。

1

实际上的区别在于对于微软操作系统中换行序列的处理方式。

二进制流以文件中存储的精确数据返回。文本流会规范化换行序列,将其替换为 '\n'


1

如果您将其作为文本打开,则C或C++运行时将根据主机(Windows或Linux)执行换行符转换。


1

在 Linux/Unix/Android 上没有区别。

在 Mac OS/X 及之后的版本上也没有区别,但是我认为旧版的 Mac 在读取时可能会将 '\n' 转换为 '\r',在写入时将其反转(仅适用于文本流)。

对于文本流,在 Windows 上会特别处理一些字符。一个 '\n' 字符将被写入为 "\r\n",而一个 "\r\n" 对将被读取为 '\n'。一个 '\0x1A' 字符被视为“文件结束”并终止读取。

我认为 Symbian PalmOS/WebOS 的行为与 Windows 相同。

二进制流只会在任何平台上写入字节,不会进行任何转换。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接