gpt4 book ai didi

python - 如何在不使用 gmpy 的情况下获取 64 位整数?

转载 作者:太空宇宙 更新时间:2023-11-03 11:14:38 24 4
gpt4 key购买 nike

我需要将一个 64 位整数从 DLL 传递到一个函数中,但 native python int 类型是 12 个字节(sys.getsizeof(1) 返回 12),我收到错误“ValueError:可能使用太多参数调用了过程(超过 4 个字节)”。有什么方法可以初始化一个 8 字节整数或转换为一个整数吗?

我试过使用 ctypes 将参数作为各种不同的 ctype 整数传递,但我无法让它工作:mydll.dllfn(c_int(1)), mydll.dllfn(c_int64(1)), mydll.dllfn(c_long(1))

我想避免使用 gmpy,因为我运行的平台目前不受 gmpy 维护或支持。

最佳答案

使用标准库 ctypes :

>>> import ctypes
>>> ctypes.c_int64(1)
c_long(1)

通常是c_longlong的别名, 表示 C signed long long 数据类型。

>>> ctypes.c_int64 is ctypes.c_longlong
True

请注意,这些类型没有溢出检查!

>>> ctypes.c_int64(2**63-1)
c_long(9223372036854775807)
>>> ctypes.c_int64(2**63)
c_long(-9223372036854775808)

ctypes.c_uint64/ctypes.c_ulonglong 如果你想要未签名的。

根据界面的外观,您可能还对 struct.pack 感兴趣:

>>> struct.pack('q', 2**63-1)
'\xff\xff\xff\xff\xff\xff\xff\x7f'

'q' 指的是 8 字节整数类型('Q' 是无符号的)。记录了其他格式字符 here .记录了字节顺序、大小和对齐选项 here .

关于python - 如何在不使用 gmpy 的情况下获取 64 位整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54114318/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com