2012-05-23 15 views
5

Czy istnieje moduł Pythona, który pomoże mi przekonwertować ciąg na 64-bitową liczbę całkowitą? (maksymalna długość tego ciągu to 8 znaków, więc powinna zmieścić się w długim).Jak przekonwertować ciąg na jego reprezentację Base-10?

Chciałbym uniknąć konieczności pisania własnej metody.

Przykład:

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

Odpowiedz

7

To jest zadanie dla struct:

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

Albo nieco trudniejsze:

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

+1 Świetne rozwiązania! – jamylak

+1

'int (s.encode ('hex'), 16)', doskonały, dzięki @Roman –

+0

Świetnie! Czy istnieje prosty sposób na przeprowadzenie konwersji odwrotnej, tzn. Uzyskanie ciągu znaków "YZ" z liczby całkowitej 22874? –

4

Nie sądzę, nie ma wbudowanego sposób to zrobić, ale jest to dość łatwe do przyrządzenia up:

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

To idzie za pośrednictwem podstawy 16, która może oczywiście zoptymalizowany. Zostawię to "jako ćwiczenie".

+1

przyjrzeć kodowania 'hex' :) –

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

Innym sposobem:

sum(ord(c) << i*8 for i, c in enumerate(mystr)) 
Powiązane problemy