2016-02-27 25 views
-3

能否将所有0-255字节状态写入文件会导致错误? 由于字节'0'是EOF,这是否意味着我的文件只能包含一个EOF字符?是否可以将所有256字节的状态写入文件?

编辑:文件可以包含任何字节0-255,他们可以重复多次,只要你想。

现在我觉得哑巴了。

+3

取决于你的意思是“错误”。如果您尝试将该文件解释为某种文件类型,则可能无法使用。但从C++的角度来看,在文件中有任何这些字节是没有错的。你为什么认为'0'字节意味着EOF?因为它用于指示C字符串的结尾?这些都不是一回事。 – BoBTFish

+0

好吧,但是如果我们用完所有字节,那么EOF是什么,文件末尾将如何标记。我可能会错过sometinhg。 – TypicalHog

+1

不是。我执行的程序几乎每天都会将全部0-255字节写入某个文件。这个程序被称为“C++编译器”。 –

回答

5

有一个原因(在某些系统上)文本文件与“二进制”文件不同。

据我所知,没有系统将任何字节写入文件会导致直接问题,但是将“任何字节”写入或读取为文本文件可能会导致一些问题:

  • 某些字节可能会被转换为另一个字节或多个字节 - 例如在DOS和Windows中,写入时的换行符('\n'或字节10(0x0a))将变为"\r\n")。反之亦然,阅读该序列将只是一个字符。

  • 某些字节或字节的组合在读取时可以看作“文件结尾”。在Windows中,这是CTRL-Z。该系统用特殊字符标记文件末尾的起源是某些操作系统对于文件大小将具有“块数”,而不是将实际大小存储在文件的元数据中。这意味着文件的大小会四舍五入到最近的块 - 例如512字节,如果你想要一个长度为108字节的文件,你会写108字节的文本,然后CTRL-Z [或任何系统使用]来标记“该块的其余部分不是文本”。

二进制文件可以包含任何绝对字节,如果字节过某种形式的链接(例如网络)不能用绝对的任何字节的组合应付的传输,它是由那层网络链接将其转换为有用的东西,然后再将其转换回来。

相关问题