我正在寫一個程序以每32位(即一次4個字節)爲單位將數據存儲到文件。我在64位Windows系統中編寫代碼,但我使用的編譯器是32位(mingw32)。在目前的系統中,長整數的大小是相同的,32位(4字節)。我目前通過使用g ++重新編譯將代碼移植到其他系統(無需更改代碼)。但是,我發現int或long的大小是不同的,取決於系統。是否有任何方式(如在頭文件中使用宏)來確定整數的大小,以決定是否應該使用int或long作爲代碼中的數據類型?我必須在4種不同類型的系統中重新編譯代碼,如果我修改代碼以使每個系統有4個不同的副本,那真是令人頭疼。動態確定基於系統的整數類型(C++)
4
A
回答
10
你想要做的是使用像int32_t
這樣的標準類型。這種類型總是32位。我目前在便攜式數據庫(berkeley db)中使用這些類型以實現跨系統兼容性。
查看here所有這些。
包含stdint.h以獲取這些定義。
2
您可以使用sizeof(int)來確定整數的大小。
如果你需要一個特定的大小,你應該使用int32_t(或的int64_t)從stdint.h
3
這是由C99提供了典型的解決方案的共同問題。
The <stdint.h>
header定義了一組提供特定大小,最快大小和最小大小的整數的類型。在解決您的問題時非常有用。
這是你使用mingw32的一件好事,因爲不幸的是,最後一次我檢查了微軟沒有提供stdint.h與他們的API。如果有人確實需要這種針對Windows,有一個開源版本,請參見:http://code.google.com/p/msinttypes/
0
IMO的問題,最好的辦法是不使用int
,long long
等,而是獨立於平臺的類型別名:int8_t
,int16_t
,int32_t
,int64_t
等
他們在<stdint.h>
相關問題
- 1. 動態確定類型投到(C#)
- 2. 正在確定基於類型檢查代碼的狀態嗎?
- 3. UITableViewCell寬度不會動態調整基於iOS設備類型
- 4. C#動態COM系統.__ ComObject
- 5. 使用動態確定類類型
- 6. 準確確定PHP運行的操作系統類型
- 7. Java相當於C#動態類類型?
- 8. 「動態」定價系統
- 9. C#動態基於類的類型生成視圖,視圖模型
- 10. WPF DataGrid基於對象類型和子類型的動態列
- 11. 基於操作系統的重定向
- 12. 基於gridview數據的數據系統
- 13. 動態指定要使用基於模板類型的方法
- 14. 動態更改基於類型的XAML綁定
- 15. 如何實現基於文件類型的文件系統?
- 16. 基於XMPP的Chatbot基於UC系統
- 17. 對於基於32位和64位系統的C或C++語言,數據類型大小如何不同
- 18. 如何確定屬性是否屬於基類或子類動態使用反射的泛型類型?
- 19. 系統狀態函數C#
- 20. 基於系統區域設置在C++
- 21. 基於AutoMapper Convention的系統
- 22. 基於知識的系統
- 23. Scala的類型系統:基本類型不匹配
- 24. 用C#中的自定義類區分in-buit系統類型
- 25. 如何動態確定ResultSet列類型
- 26. 確定模板類型是動態
- 27. C中可見性的系統類型#
- 28. 基於C#中基類動態參數調用的子類查找方法
- 29. php如何基於動態考勤系統
- 30. css網格系統的列寬度是動態確定的嗎?
非常感謝定義。我認爲這就是我期待的:) – user1285419 2012-04-15 20:15:09