2012-05-23 15 views
5

C'è qualche modulo Python che mi aiuti a convertire una stringa in un numero intero a 64 bit? (la lunghezza massima di questa stringa è di 8 caratteri, quindi dovrebbe essere lunga).Come convertire una stringa nella sua rappresentazione Base-10?

Vorrei evitare di dover scrivere il mio metodo.

Esempio:

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

risposta

7

Questo è un lavoro per struct:

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

O un po 'più complicato:

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

+1 Grandi soluzioni! – jamylak

+1

'int (s.encode ('hex'), 16)', perfetto, grazie @Roman –

+0

Grande! Esiste un modo semplice per eseguire la conversione opposta, cioè ottenere la stringa "YZ" dall'intero 22874? –

4

Non credo che ci sia un metodo incorporato per fare questo, ma è abbastanza facile da cucinare:

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

Questo va via base 16 che può ovviamente essere ottimizzato. Lascerò che "come esercizio".

+1

dare un'occhiata alla codifica 'hex' :) –

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

Un altro modo:

sum(ord(c) << i*8 for i, c in enumerate(mystr)) 
Problemi correlati