python中的DWORD乘法

2024-09-28 22:09:48 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

a = 3423729
b = 96300
c = a*b = 329705102700

PowerBuilder说:

^{pr2}$

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


Tags: 答案应用程序符号calc原因整数buglong
3条回答

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

import ctypes

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

您可以使用ctypes软件包:

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

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

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

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

相关问题 更多 >