【问题标题】:32 bit long vs 64 bit long32 位长与 64 位长
【发布时间】:2013-01-26 07:34:53
【问题描述】:

我正在开发已从 32 位机器迁移到 64 位机器的项目(c++ 与 Python 集成)。在 Python 中,C long 与 Python Integer 进行映射。 所以我无法更改 Python 接口(客户端接口)并且总是从 python 客户端获取溢出错误。它在 32 位机器上运行良好

所以我有以下解决方案

1) 在 64 位机器中将所有 long 转换为 int。

2)在 64 位机器上声明 32 位长。

我们是否有任何通用解决方案/头文件可以让我选择声明 32 位 datatype always 所以我可以用更一般的方式处理这个问题。

我知道这可能是小问题,但我无法找到通用解决方案。

【问题讨论】:

  • 只是为了记录,但 Python 的整体数据类型实际上是可变宽度的,溢出之类的东西在那里不是问题。根据 Python 版本,大数用不同的类型表示,2**1000 在 Python 2 中是 long,在更高版本中是 int。
  • @doomster,在更改 32 位后,我仍然面临来自 Python 接口的溢出错误。他们正在使用 Python 2.7。但它正在使我们的应用程序崩溃,我们需要自己动手修复

标签: c++


【解决方案1】:

我们是否有任何通用解决方案/头文件可以让我选择始终声明 32 位数据类型?

是的,there is,从 C99 开始。

#include <stdint.h>

uint32_t foo;

【讨论】:

  • 感谢快速和适当的响应
【解决方案2】:

标准 C99(和更高版本)具有 &lt;stdint.h&gt; 标头,为 32 位有符号整数(和许多其他类型)定义 int32_t,最近的 C++ 具有 &lt;cstdint&gt;

如果您关心bignums(任意精度数字),请注意这是一个困难的主题并使用一些现有的库,例如GMP

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-29
    • 2013-06-21
    • 1970-01-01
    • 1970-01-01
    • 2015-04-21
    • 2014-01-04
    • 2011-09-24
    相关资源
    最近更新 更多