2012-10-11 64 views
0

存儲字節的不好方法:
我在文件中存儲了大約一些字節。字節由任意位(1或0)組成。
約10個字節組成一個日誌項目。我在的日誌末尾添加'\ n'
後來我從文件中讀取(文件以文本格式存儲和讀取)。
我發現日誌的一些兩個字節組成'\ n'(0x0d,0x0a)
但是我使用文件流的'readLine()'來讀取文件的內容,這顯然無法識別行的正確結尾。
我得到的結果是一個質量,但有沒有更好的方法來存儲字節(包含任意1或0)並從文件中讀取?
我在qt中使用C++,如果可能的話,IDE下的解決方案應該更好。如何避免從文件中讀取錯誤的' n'?

我的英文很差。感謝您的耐心閱讀!

+2

混合二進制和文本聽起來像是一個災難的食譜給我。爲什麼不定義每次讀取N個字節的固定格式? – ksming

回答

1

我懷疑你正在使用Windows,而你正在以文本模式寫入並以二進制模式讀取。

對於保存到文件系統的windows文本文件,在行尾應該有\ r \ n(0x0d,0x0a)。在文本模式下寫入時,會自動添加\ r。在文本模式下閱讀將刪除\ r,所以你永遠不應該看到它。

如果您以相同的模式(文本或二進制)讀寫,那麼您將看到與您所寫的相同的數據。在Linux上,文本模式和二進制模式沒有區別,但你應該得到正確的模式,以保持你的代碼的便攜性。

如果這是一個二進制文件(聽起來像你在寫字節而不是字符串),那麼你應該可能使用二進制模式讀取和寫入。

+0

在我的日誌項目中,首先有一些字符串(其長度不確定),然後11個字節跟隨字符串,如何存儲和讀取日誌項目? ;) 謝謝閱讀! – Al2O3

+0

有很多方法可以做到這一點。通常,每個字符串的末尾都會有一個分隔符。 \ 0例如由C/C++在內部使用。您可以使用任何其他不在數據本身中顯示的分隔符。如果它出現在數據中,您可以將分隔符轉義出來,或者在讀取之前將字符串的長度寫入文件。 – AutomatedMike

0

您可以使用special character來代替'0',然後將其存儲到文件中並在該行的末尾添加'\n'。 試試這個,它可能有幫助。

相關問題