如何在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的十六進制數,但我的實際數字是非常大的手動計數。我是新來的編碼,你的幫助將不勝感激。
如何在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的十六進制數,但我的實際數字是非常大的手動計數。我是新來的編碼,你的幫助將不勝感激。
使用功能hex
:
>>> b = 0x346
>>> hex(b)
'0x346'
>>> len(hex(b))-2
3
或使用字符串格式化:
>>> len("{:x}".format(b))
3
由於阿什維尼寫道,在hex
功能確實爲你的辛勤工作:
十六進制(x)
將整數(任何大小)轉換爲十六進制字符串。結果是一個有效的Python表達式。
雖然使用字符串表示作爲中間結果有一些簡單的優點,但它有時會浪費時間和內存。我寧願一個數學解(返回數字的純數字,沒有任何0X前綴):
from math import ceil, log
def numberLength(n, base=16):
return ceil(log(n+1)/log(base))
+1調整採取的事實關心,那你的電話號碼基地的精確的動力,你需要一個領先的「1」。
「有點浪費時間和內存」 - 我很懷疑 –
考慮到這是python我懷疑資源問題的差異。如果它是嵌入式控制器的代碼,那麼也許。但是,除了「顯而易見」的基於字符串的解決方案之外,還需要+1。 –
我使用timeit模塊進行的測量得到了以下結果:字符串解決方案的運行時間與數字位數幾乎成線性關係,日誌解決方案几乎是一個常數。甚至可以達到240位數字。對於32位數的字符串例程需要一半的時間,對於1024位數的字符串解決方案需要日誌解決方案的因子3。原來的問題提到**非常大**號碼... – guidot
你可以使用字符串表示的字母數嗎? –
「十六進制數的長度」是什麼意思?你在期待0x346的長度是多少? –
@JustinEthier 3? –