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
虽然使用字符串表示形式作为中间结果有一些简单的优点,但有点浪费时间和内存。我更喜欢数学解决方案(返回没有任何 0x 前缀的纯位数):
from math import ceil, log
def numberLength(n, base=16):
return ceil(log(n+1)/log(base))
+1 调整解决了这样一个事实,即要获得数字基数的精确幂,您需要一个前导“1”。
这是使用递归计算十六进制数字位数的程序
def count_hex(n):
''' returns the num of digits in hex'''
if n == 0:
return 0
n >>= 4
return 1 + count_hex(n)
打印(count_hex(0xFFFF))
4
您也可以在不使用 bit_length 方法转换为字符串的情况下执行此操作:
def hexLen(N):
return (N.bit_length()+3)//4
请注意,当 N 为 0 时,他返回的长度为零,您的函数将返回
None
,但实际上,您仍然需要一个十六进制数字来表示零。 (提示:添加 max(1,...)
以覆盖该边缘情况)