python中的DWORD乘法

python中的DWORD乘法,python,Python,我有一个问题,我一直在寻找答案 在一个用PowerBuilder编写的应用程序中,出现了一个bug(没有及时发现),它如下所示-long*long导致long(不在longlong),原因是输出有些奇怪。现在我需要在python中执行同样的操作。例如: a = 3423729 b = 96300 c = a*b = 329705102700 PowerBuilder说: c = a*b = -1007379092 由于进一步的测试,它似乎是一个带符号的32位整数,但我无法让python返回这

我有一个问题,我一直在寻找答案

在一个用PowerBuilder编写的应用程序中,出现了一个bug(没有及时发现),它如下所示-
long*long
导致
long
(不在
longlong
),原因是输出有些奇怪。现在我需要在python中执行同样的操作。例如:

a = 3423729
b = 96300
c = a*b = 329705102700
PowerBuilder说:

c = a*b = -1007379092

由于进一步的测试,它似乎是一个带符号的32位整数,但我无法让python返回这样的结果。不管怎么说,使用calc并让他使用dword乘法,结果是
-1007379092
。有什么线索可以解决这个问题吗?

您的应用程序似乎正在获取结果最右边的32位,表示为32位整数

您可以使用
ctypes
库中的类型以类似的方式表示特定大小的有符号/无符号整数。对于有符号32位整数:

>>> import ctypes
>>> c = 329705102700
>>> ctypes.c_int32(c).value
-1007379092

您可以使用
ctypes
软件包:

>>> from ctypes import c_int32
>>> a = 3423729
>>> b = 96300
>>> c_int32(a*b).value
-1007379092

我不知道为什么要这样做,因为Python专门动态分配存储以避免整数溢出。如果确实要复制溢出,可以尝试以下操作:

import ctypes

a, b = 3423729, 96300
c = ctypes.c_int(a * b)
print(c.value)