代码之家  ›  专栏  ›  技术社区  ›  Matt Joiner

在64位系统上,Python的ctypes.c\u是否长64位?

  •  7
  • Matt Joiner  · 技术社区  · 14 年前

    ctypes 模块?

    4 回复  |  直到 14 年前
        1
  •  10
  •   Matthew Murdoch    7 年前

    大小 long depends on the memory model . 在Windows(LLP64)上是32位的,在UNIX(LP64)上是64位的。

    如果需要64位整数,请使用 c_int64 .

    如果需要指针大小的整数,请使用 c_void_p (值表示为整数)。

        2
  •  4
  •   Community Keith    7 年前

    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)
    >>>
    

    看到了吗 What is the bit size of long on 64-bit Windows?

        3
  •  2
  •   Thomas Wouters    14 年前

    如果是C long 是64位的(就像在LP64和ILP64系统上一样,几乎是Windows以外的任何64位系统),那么也是 ctypes.c_long . 如果C long不是64位的(比如在64位Windows等LLP64系统上),那么 ctypes.c\长 也不是。

        4
  •  1
  •   Yann Vernier    14 年前

    对。

    >>> ctypes.c_long(2**50)
    c_long(1125899906842624)
    >>> ctypes.c_long(2**64)
    c_long(0)
    >>> ctypes.c_long(2**63)
    c_long(-9223372036854775808)