std::fstream
可以选择将流视为二进制,而不是文本。有什么区别?
据我所知,这完全取决于文件在其他程序中的打开方式。如果我将A
写入二进制流,它将被转换为01000001
(65,A
的ASCII代码) - 完全相同的表示。可以将其视为文本编辑器中的字母“A”,或其他程序的二进制序列01000001
。
我是否遗漏了某些内容,或者流是否被认为是二进制文件没有任何区别?
答案 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相同。
二进制流只写入字节,不会在任何平台上进行任何转换。