2012-05-23 19 views
5

¿Hay algún módulo de Python que me ayude a convertir una cadena en un entero de 64 bits? (la longitud máxima de esta cadena es de 8 caracteres, por lo que debe caber en un largo).¿Cómo convertir una cadena a su representación Base-10?

Me gustaría evitar tener que escribir mi propio método.

Ejemplo:

Input String Hex   result (Base-10 Integer) 
'Y'   59   89 
'YZ'   59 5a  22874 
... 

Respuesta

7

Este es un trabajo para struct:

>>> s = 'YZ' 
>>> struct.unpack('>Q', '\x00' * (8 - len(s)) + s) 
(22874,) 

O un poco más complicado:

>>> int(s.encode('hex'), 16) 
22874 
+2

+1 ¡Excelentes soluciones! – jamylak

+1

'int (s.encode ('hex'), 16)', perfecto, gracias @Roman –

+0

¡Estupendo! ¿Hay una manera fácil de realizar la conversión opuesta, es decir, obtener la cadena 'YZ' del número entero 22874? –

4

No creo que hay un método integrado para hacer esto, pero es bastante fácil de cocinar:

>>> int("".join([hex(ord(x))[2:] for x in "YZ"]), 16) 
22874 

Esto va a través de la base 16 que puede por supuesto, optimizado. Lo dejaré "como un ejercicio".

+1

echar un vistazo a la codificación 'hexagonal' :) –

1
>>> reduce(lambda a,b: a*256+b, map(ord,'YZ'), 0) 
22874 
3

Otra forma:

sum(ord(c) << i*8 for i, c in enumerate(mystr)) 
Cuestiones relacionadas