什么使二进制流特殊?

时间:2011-09-22 14:20:54

标签: c++ file text binary fstream

std::fstream可以选择将流视为二进制,而不是文本。有什么区别?

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

我是否遗漏了某些内容,或者流是否被认为是二进制文件没有任何区别?

5 个答案:

答案 0 :(得分:5)

在文本流中,换行符可以与\n字符进行转换;使用二进制流,这不会发生。原因是不同的操作系统有不同的存储换行符约定; Unix使用\n,Windows \r\n和使用\r的老式Mac。对于使用文本流的C ++程序,这些程序都显示为\n

答案 1 :(得分:1)

你反过来说,它是特殊的文本流,特别是因为\n\n(或甚至\r\n的{​​{1}}转换。 。)取决于你的系统。

答案 2 :(得分:1)

实际差异在于对Microsoft操作系统上的行结束序列的处理。

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

答案 3 :(得分:1)

如果以文本形式打开它,则C或C ++运行时将根据主机(Windows或Linux)执行换行转换。

答案 4 :(得分:1)

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

在Mac OS / X或更高版本上没有任何区别,但我 认为 较旧的Mac可能会在阅读时将'\ n'更改为'\ n' ,以及写作的反向(仅适用于文本流)。

在Windows上,对于文本流,某些字符会得到特殊处理。 '\ n'字符写为“\ r \ n”,“\ r \ n”对写为'\ n'。 “\ 0x1A”字符被视为“文件结束”并终止读取。

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

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