2010-07-24 21 views

Respuesta

10

El tamaño de longdepends on the memory model. En Windows (LLP64) es de 32 bits, en UNIX (LP64) es de 64 bits.

Si necesita un entero de 64 bits, use c_int64.

Si necesita un número entero de puntero, use c_void_p ("El valor se representa como entero").

+0

Oh wow, enlace fantástico, nunca supe que el modelo de memoria se formalizó. –

1

Sí.

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

Supongo que está ejecutando esto desde un sistema operativo LP64, pero las otras respuestas en realidad me dijeron cuándo y por qué :) –

4

Actualmente no.

En un sistema Windows de 64 bits, largo es de 32 bits.

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

Ver What is the bit size of long on 64-bit Windows?

+0

Buen trabajo pisoteando mi suposición de que Windows-64x era de 64 bits. –

2

Si un long C es de 64 bits (como es el LP64 y ILP64 sistemas, casi cualquier sistema de 64 bits que no sea Windows), entonces también lo es ctypes.c_long. Si una C de largo no es de 64 bits (como en los sistemas LLP64 como Windows de 64 bits), tampoco lo es una ctypes.c_long.

Cuestiones relacionadas