Является ли Python ctypes.c_long 64-битным в 64-битных системах? - PullRequest
7 голосов
/ 24 июля 2010

В C long - это 64-битная система в 64-битной системе. Это отражено в модуле Python ctypes ?

Ответы [ 4 ]

10 голосов
/ 24 июля 2010

Размер long зависит от модели памяти .В Windows (LLP64) он 32-разрядный, в UNIX (LP64) - 64-разрядный.

Если вам нужно 64-разрядное целое число, используйте c_int64.

Если вам нужно целое число размером с указатель, используйте c_void_p («Значение представляется как целое число»).

4 голосов
/ 24 июля 2010

На самом деле нет.

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

См. Каков размер long в 64-битной Windows?

2 голосов
/ 24 июля 2010

Если C long является 64-битным (как это происходит в системах LP64 и ILP64, почти во всех 64-битных системах, кроме Windows), то ctypes.c_long такжеЕсли C long не является 64-битным (как в системах LLP64, таких как 64-битные Windows), то и ctypes.c_long тоже нет.

1 голос
/ 24 июля 2010

Да.

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