2013-03-08 84 views
3

如果我在32位應用程序中將int寫入fstream,並將int讀回到64位應用程序,我應該期望值有所不同嗎?如果是這樣(並且我認爲是這樣),那麼實現獨立於架構的流操作的最佳方式是什麼?C++:32與64位流操作

+4

我們是否假設'fstream'是*格式*輸出/輸入,而不是二進制模式?或者相反? – WhozCraig 2013-03-08 17:53:42

+0

在WhozCraig說,這真的取決於你是否格式化(=文本)或無格式(=二進制)輸出。 – Angew 2013-03-08 17:55:01

+0

我想推薦protobuf作爲一個很好的序列化系統,它是語言以及平臺不可知的。 https://code.google.com/p/protobuf/ – Omnifarious 2013-03-08 19:44:08

回答

2

如果您使用operator<<operator>>進行讀寫,它將獨立於平臺,假設整數足夠小以適應兩種類型,因爲if會寫成文本。如果您使用ostream::readosteam::write,它將不會與平臺無關,因爲您將編寫二進制數據。

如果您不需要原始性能,使用文本格式是實現平臺獨立性的最簡單方法。如果你需要更好的性能,你應該看看序列化庫。 Boost具有良好的跨平臺特性。

2

那麼它取決於你是否編寫二進制或ASCII。如果你用ASCII(UTF-8)編寫你的數字,那麼讀數應該產生相同的結果。

我建議您使用boost::serializaton包以受控和統一的方式讀取和寫入數據。

然而,如果它在相反的方向工作並不確定,即從64位到32位。這取決於你的編譯器,如果它編譯爲64位,那麼你可能寫的值不能被讀入32位ints。即使您寫入格式化的流。

但是,C++中的int的大小不能保證,只是大小與short大小相等。這取決於編譯器。

如果您想確定可以使用GMP來處理大整數,然後自動驗證數據。