Python的ctypes.c_long在64位系统上是64位吗?

7 投票
4 回答
6659 浏览
提问于 2025-04-16 01:45

在C语言中,长整型(long)在64位系统上是64位的。这一点在Python的ctypes模块中有体现吗?

4 个回答

2

如果在C语言中,long类型是64位的(比如在LP64和ILP64系统上,几乎所有64位系统都是这样,除了Windows),那么ctypes.c_long也是64位的。如果C语言中的long类型不是64位的(比如在LLP64系统上,比如64位的Windows),那么ctypes.c_long也就不是64位的。

4

其实不是这样的。

在64位的Windows系统上,long类型是32位的。

Python 3.1.2 (r312:79149, Mar 20 2010, 22:55:39) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import ctypes
>>> ctypes.c_long(2**31)
c_long(-2147483648)
>>> ctypes.c_long(2**31+1)
c_long(-2147483647)
>>> ctypes.c_long(2**31-1)
c_long(2147483647)
>>>

可以查看这个链接了解更多信息:在64位Windows上long的位数是多少?

11

long的大小是根据不同的内存模型来决定的。比如在Windows系统上(叫做LLP64),它的大小是32位;而在UNIX系统上(叫做LP64),它的大小是64位。

如果你需要一个64位的整数,可以使用c_int64

如果你需要一个和指针大小相同的整数,可以使用c_void_p(这个值会以整数的形式表示)。

撰写回答