2016-02-27 23 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 [或任何系統使用]來標記「該塊的其餘部分不是文本」。

二進制文件可以包含任何絕對字節,如果字節過某種形式的鏈接(例如網絡)不能用絕對的任何字節的組合應付的傳輸,它是由那層網絡鏈接將其轉換爲有用的東西,然後再將其轉換回來。

相關問題