如果我在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位操作系統C/C++應用
- 2. 32與64位GC
- 3. 對於64位變量,按位移> = 32操作C
- 4. 32位dll 64位操作系統與regsvr32.exe
- 5. C# - 在32位和64位
- 6. SHGetFolderPath()32位與64位
- 7. windows 7 64位安裝32位流星
- 8. Java和Eclipse - 32與64位
- 9. MySQL的ODBC 32與64位
- 10. 64位操作系統上的32位或64位應用程序?
- 11. 在32位操作系統中使用64位dll
- 12. 使用arm v8運行32位和64位操作系統
- 13. 對32位系統中的64位字進行操作
- 14. 32位和64位應用程序之間的COM互操作
- 15. VM Virtual Box 64位硬件上的32位操作系統
- 16. 在64位操作系統上調試32位CASSINI(Oracle 9)
- 17. 64位操作系統上的32位ActiveX DLL的問題
- 18. 如何檢測Flex中的32位或64位操作系統?
- 19. 在64位服務器上加載32位dll操作系統
- 20. 在32位操作系統上運行64位jvm
- 21. 64位操作系統上的32位VC++可再發行?
- 22. 32位DLL不能在64位操作系統
- 23. 32位或64位?使用C代碼
- 24. 32位Excel宏與64位不兼容
- 25. 確定64位與32位Windows
- 26. .NET 32位開發與64位生產
- 27. linux上的QtCreator:32位與64位
- 28. Macintosh Python:64位與32位問題
- 29. 32位與64位浮點性能
- 30. XOR高32位,低32位,64位數
我們是否假設'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