应该打开任何C文件作为二进制文件

时间:2018-05-06 11:25:34

标签: c file memory binaryfiles

我已经在某处读过我们应该总是在C中打开文件作为二进制文件(即使它是一个文本文件)。当时(几年前)我并不太关心它,但现在我真的需要了解是否是这种情况以及如何实现。

我一直在努力寻找这方面的信息,但我发现最多的是他们之间的开放差异 - 甚至不是他们的结构差异。

所以我想我的问题是:为什么我们总是以二进制文件的形式打开文件,即使我们之前猜测它是一个文本文件?第二个问题在于每个文件本身的结构,是一个像“加密”文本文件的二进制文件吗?

1 个答案:

答案 0 :(得分:5)

姓名"文字"对于"二进制"虽然相当助记,但有时会让你想知道应用哪一个。最好将它们转换为基础机制,并根据您需要的那些进行选择。

"二进制"也可以被称为" verbatim"开放模式。文件中的每个字节都将在磁盘上完全按原样读取。这意味着,如果它是包含文本" ABC"的Windows文件。在一行(包括行终止符)上​​,从文件中读取的字节将为65 66 67 13 10

"文本"模式也可以被称为"线路终结器翻译"开放模式。当文件包含由您作为"行终止符" (1)运行的平台定义的1个或多个字符的序列时,整个序列将从文件中读取,但运行时将使其看起来好像只读取了字符'\n'(使用ASCII时为10)。对于上面的相同Windows文件,如果它在Windows上作为文本文件打开,则从文件中读取的字节将为65 66 67 10

同样适用于写入:文件开头为"二进制"写入将准确写出你给它的字节。一个文件打开为" text"将字节'\n'(ASCII中的10)转换为平台定义为行终止字符序列的任何内容。

我不认为"总是这样做"规则可以从上面提炼出来,但也许你可以用它来为每个案例做出明智的决定。

(1)在Unix风格的系统中,行终止字符序列是LF(ASCII 10)。在Windows上,它是双字符序列CR LF(ASCII 13 10)。在旧的X前Mac OS上,它只是单字符CR(ASCII 13)。