如果我在32位應用程序中將int寫入fstream,並將int讀回到64位應用程序,我應該期望值有所不同嗎?如果是這樣(並且我認爲是這樣),那麼實現獨立於架構的流操作的最佳方式是什麼?C++:32與64位流操作
3
A
回答
2
如果您使用operator<<
和operator>>
進行讀寫,它將獨立於平臺,假設整數足夠小以適應兩種類型,因爲if會寫成文本。如果您使用ostream::read
和osteam::write
,它將不會與平臺無關,因爲您將編寫二進制數據。
如果您不需要原始性能,使用文本格式是實現平臺獨立性的最簡單方法。如果你需要更好的性能,你應該看看序列化庫。 Boost具有良好的跨平臺特性。
2
那麼它取決於你是否編寫二進制或ASCII。如果你用ASCII(UTF-8)編寫你的數字,那麼讀數應該產生相同的結果。
我建議您使用boost::serializaton
包以受控和統一的方式讀取和寫入數據。
然而,如果它在相反的方向工作並不確定,即從64位到32位。這取決於你的編譯器,如果它編譯爲64位,那麼你可能寫的值不能被讀入32位int
s。即使您寫入格式化的流。
但是,C++中的int
的大小不能保證,只是大小與short
大小相等。這取決於編譯器。
如果您想確定可以使用GMP來處理大整數,然後自動驗證數據。
相關問題
- 1. 32位/ 64位操作系統?
- 2. 確定從32位操作系統或64位操作系統C/C++應用
- 3. Windows 64位操作系統上的32位或64位Android SDK?
- 4. 32與64位GC
- 5. 32與64位JVM
- 6. 對於64位變量,按位移> = 32操作C
- 7. 開在64位操作系統32位Visual C#項目
- 8. 32位體系結構中的64位操作數的操作?
- 9. 模塊化計算32位與64位操作系統
- 10. 32位dll 64位操作系統與regsvr32.exe
- 11. Windows結構化存儲 - 32位與64位COM互操作
- 12. 64位操作系統與32位MS辦公室問題
- 13. C# - 在32位和64位
- 14. Java JDK 32位與64位
- 15. SHGetFolderPath()32位與64位
- 16. 64位庫,應該與32位和64位進程工作
- 17. windows 7 64位安裝32位流星
- 18. System.Data.Sqlite.dll 32勝和64位C#
- 19. MySQL的ODBC 32與64位
- 20. Java和Eclipse - 32與64位
- 21. 32位系統中的32位和64位之間的操作(sint/uint)
- 22. 什麼數據類型是32位操作系統中的16位和64位操作系統中的32位?
- 23. 64位操作系統上的32位或64位應用程序?
- 24. 關於64位和32位的Mac操作系統
- 25. 32位DLL不能在64位操作系統
- 26. 64位操作系統上的32位ActiveX DLL的問題
- 27. 使用arm v8運行32位和64位操作系統
- 28. 安裝在64位操作系統上的Windows 32位Eclipse?
- 29. JNA在64位操作系統上具有32位JVM
- 30. 在32位操作系統中使用64位dll
我們是否假設'fstream'是*格式*輸出/輸入,而不是二進制模式?或者相反? – WhozCraig 2013-03-08 17:53:42
在WhozCraig說,這真的取決於你是否格式化(=文本)或無格式(=二進制)輸出。 – Angew 2013-03-08 17:55:01
我想推薦protobuf作爲一個很好的序列化系統,它是語言以及平臺不可知的。 https://code.google.com/p/protobuf/ – Omnifarious 2013-03-08 19:44:08