COM调用:overflowerrror:Python int太大,无法转换为C long

2024-09-27 21:26:21 发布

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

我试图使用win32compython(v3.3)库调用COM方法。此方法接受一个地址和一个要写入该地址的数据。在

SWDIOW(IN addr, IN data)

问题是:可接受的数据大小是32位。当我用这些参数调用此方法时,没有问题:

^{pr2}$

但当数据太大(实际上大于2^(-31)-1)时,例如

swdiow(0x400c0000, 0xF3804770)

发生这种情况:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\WinPython\python-3.3.2.amd64\lib\site-packages\win32com\gen_py\97FF1B53-6477-4BD1-8A29-ADDB58E862E5x0x16x0.py", line 1123, in swdiow
    , data)
OverflowError: Python int too large to convert to C long

我认为这个问题的发生是因为python将0xF3804770作为有符号整数。此值需要32位表示为无符号。为了使其有符号,Python再添加一个符号位,0xF3804770的大小变为33位。因为这个符号位,它不能转换成C long类型,我相信它的大小是32位。在

我已经找到了一个解决方法,可以在数字太大时将其转换为负整数。在

>> int.from_bytes((0xF3804770).to_bytes(4,'big',signed=False),'big', signed=True)
-209696912

也许这是我能做的最好的事情,但我想知道有没有更优雅的解决办法?在

顺便说一下,我的“数据”源是一个文本文件,它包含4个字节的十六进制值,例如:

D0010880
D1FD1E40
F3EF4770
431103C2
...

Tags: to数据方法inpydata地址line

热门问题