我正在写一个程序以每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