Python 十六进制数的长度

Python 十六进制数的长度,python,counting,Python,Counting,如何在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 = 0x

如何在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
正如Ashwini所写,函数为您完成了艰巨的工作:

十六进制(x)

将整数(任意大小)转换为十六进制字符串。结果是一个有效的Python表达式


虽然使用字符串表示作为中间结果在简单性方面有一些优点,但这在一定程度上浪费了时间和内存。我更喜欢数学解决方案(返回没有任何0x前缀的纯数字):


+1调整考虑到这样一个事实,即对于数字基数的精确幂,您需要一个前导“1”。

您可以使用字符串表示的字母数吗?您所说的“十六进制数的长度”到底是什么意思?你希望
0x346
的长度是多少?@DavidJashi-我想这一点现在已经很明显了,再次阅读了这个问题。我一定是想得太多了。@JustinEthier我希望长度是3。我们“显示出一些错误”:这不是什么大惊喜。在“a=a/16”和“return i”的两行中,您混合使用了制表符和空格。如果你幸运的话,你可以侥幸逃脱,但是“有些浪费了时间和内存”-我怀疑这是python,我怀疑在资源问题上的差异。如果它是嵌入式控制器的代码,那么可能。但是+1用于超越“明显的”基于字符串的解决方案。我使用timeit模块进行的测量给出了以下结果:字符串解决方案的运行时间几乎与位数成线性关系,日志解决方案的运行时间几乎为常数。盈亏平衡约为240位数字。对于32位数字,字符串例程需要一半的时间,对于1024位数字,字符串解决方案需要日志解决方案的因子3。最初的问题提到了非常大的数字。。。
from math import ceil, log

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