2013-06-28 77 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

由於阿什維尼寫道,在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