2012-05-23 5 views
5

Есть ли какой-нибудь модуль python, который поможет мне преобразовать строку в 64-битное целое число? (максимальная длина этой строки составляет 8 символов, поэтому она должна соответствовать длине).Как преобразовать строку в представление Base-10?

Я хотел бы избежать необходимости писать свой собственный метод.

Пример:

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

ответ

7

Это работа для struct:

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

Или немного хитрее:

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

+1 Отличные решения! – jamylak

+1

'int (s.encode ('hex'), 16)', отлично, спасибо @Roman –

+0

Отлично! Есть ли простой способ выполнить противоположное преобразование, т. Е. Получить строку «YZ» из целого числа 22874? –

4

Я не думаю, что есть встроенный способ сделать это, но это достаточно легко приготовить:

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

Это проходит через основание 16, которое может конечно, быть оптимизированным. Я оставлю это «как упражнение».

+1

взглянуть на кодировку 'шестигранной' :) –

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

Другой способ:

sum(ord(c) << i*8 for i, c in enumerate(mystr)) 
Смежные вопросы