【问题标题】:dynamically determine the type of integer based on the system (c++)根据系统动态确定整数的类型(c++)
【发布时间】:2012-04-27 06:39:19
【问题描述】:

我正在编写一个程序,以每 32 位为单位(即一次 4 个字节)将数据存储到文件中。我在 64 位 Windows 系统中编写代码,但我使用的编译器是 32 位(mingw32)。在当前系统中,int和long的大小都是一样的,都是32位(4bytes)。我目前正在通过使用 g++ 重新编译(不更改代码)将代码移植到其他系统。但是,我发现 int 或 long 的大小是不同的,并且取决于系统。是否有任何方式(例如在头文件中使用宏)来确定整数的大小,以便决定是否应将 int 或 long 用作代码中的数据类型?我必须在 4 个不同类型的系统中重新编译代码,如果我将代码修改为每个系统有 4 个不同的副本,那真是令人头疼。

【问题讨论】:

    标签: c++ int long-integer


    【解决方案1】:

    这是 C99 提供的规范解决方案的常见问题。

    The <stdint.h> header 定义了一组类型,这些类型提供特定大小、最快大小和最小大小的整数。在解决您的问题时非常有用。

    您使用 mingw32 是一件好事,因为不幸的是,我上次检查 Microsoft 时没有提供 stdint.h 及其 API。如果有人在 Windows 上确实需要这个,有一个开源版本,请参阅:http://code.google.com/p/msinttypes/

    【讨论】:

      【解决方案2】:

      您想要做的是使用像int32_t 这样的标准类型。此类型始终为 32 位。我目前在可移植数据库 (berkeley db) 中使用这些类型以实现跨系统兼容性。

      请参阅here 了解所有这些信息。

      包含 stdint.h 以获取这些定义。

      【讨论】:

      • 非常感谢。我想这就是我正在寻找的 :)
      【解决方案3】:

      IMO 解决该问题的最佳方法是不使用intlong long 等,而是使用与平台无关的类型别名:int8_tint16_tint32_tint64_t 等。

      它们在<stdint.h>中定义

      【讨论】:

        【解决方案4】:

        您可以使用 sizeof(int) 来确定整数的大小。

        如果您需要特定大小,则应使用 stdint.h 中的 int32_t(或 int64_t)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-03-23
          • 2011-04-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-07-06
          • 1970-01-01
          • 2011-10-20
          相关资源
          最近更新 更多