2012-05-23 27 views
5

Gibt es ein Python-Modul, das mir helfen würde, eine Zeichenfolge in eine 64-Bit-Ganzzahl zu konvertieren? (die maximale Länge dieser Zeichenfolge ist 8 Zeichen, so sollte es in eine lange passen).Wie konvertiert man einen String in seine Base-10-Darstellung?

Ich möchte vermeiden, meine eigene Methode schreiben zu müssen.

Beispiel:

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

Antwort

7

Dies ist ein Job für struct:

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

Oder etwas kniffliger:

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

+1 Große Lösungen! – jamylak

+1

'int (s.encode ('hex'), 16)', perfekt, danke @Roman –

+0

Großartig! Gibt es eine einfache Möglichkeit, die entgegengesetzte Konvertierung durchzuführen, d. H. Die Zeichenfolge 'YZ' von der Ganzzahl 22874? –

4

Ich glaube nicht, gibt es eine integrierte Methode, dies zu tun, aber es ist leicht genug, um zu kochen:

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

Dieses über Basis geht 16 die natürlich optimiert werden. Ich werde das "als Übung" verlassen.

+1

einen Blick auf 'hex' encoding :) –

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

Ein anderer Weg:

sum(ord(c) << i*8 for i, c in enumerate(mystr)) 
Verwandte Themen