2013-06-28 3 views
0

Как мы можем получить длину шестнадцатеричного числа на языке python? Я пробовал использовать этот код, но даже это показывает некоторую ошибку.длина шестнадцатеричного числа

i=0 
def hex_len(a): 
    if a>0x0: 
     #i=0 
     i=i+1 
     a=a/16 
     return i 
b=0x346 
print hex_len(b) 

Здесь я просто использовал 346 как шестнадцатеричное число, но мои фактические цифры очень велики, чтобы их можно было подсчитать вручную. Я новичок в кодировании, ваша помощь будет очень признательна.

+0

Можете ли вы использовать количество букв строкового представления? –

+1

Что именно вы подразумеваете под «длиной шестнадцатеричного числа»? Что вы ожидаете от длины '0x346'? –

+0

@ JustinEthier 3? –

ответ

6

Используйте функцию hex:

>>> b = 0x346 
>>> hex(b) 
'0x346' 
>>> len(hex(b))-2 
3 

или с помощью строки форматирования:

>>> len("{:x}".format(b)) 
3 
2

Как писал Ashwini, функция hex делает тяжелую работу для вас:

шестигранник (x)

Преобразование целочисленного числа (любого размера) в шестнадцатеричную строку. Результатом является действительное выражение Python.

2

При использовании строкового представления в качестве промежуточного результата есть некоторые достоинства в простоте, это несколько потерянное время и память. Я бы предпочел математическое решение (возвращающийся чистое количество цифр без 0x префикса):

from math import ceil, log 

def numberLength(n, base=16): 
    return ceil(log(n+1)/log(base)) 

+1 регулировка заботится о том,, что для точной мощности вашего номера базы вам нужно ведущий «1».

+0

«несколько потерянное время и память» - я скептически настроен –

+0

Учитывая это python, я сомневаюсь, что разница в ресурсах имеет значение. Если бы это был код встроенного контроллера, то, может быть. Но +1 для мышления за «очевидным» строковым решением. –

+0

Мои измерения с использованием модуля timeit дали следующие результаты: линейное решение имеет время работы почти линейное по отношению к числу цифр, а решение журнала - почти постоянное. Разрыв даже составляет около 240 бит. Для 32-разрядного номера строковая подпрограмма требует половину времени, для 1024-битного номера для решения строки требуется фактор 3 решения журнала. Оригинальный вопрос, упомянутый ** очень большие ** цифры ... – guidot