十六进制数的长度[重复]

问题描述 投票:0回答:5

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 counting
5个回答
7
投票

使用功能

hex
:

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

或使用字符串格式:

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

7
投票

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

from math import ceil, log

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

+1 调整解决了这样一个事实,即要获得数字基数的精确幂,您需要一个前导“1”。


2
投票

正如 Ashwini 所写,

hex
函数为您完成了艰苦的工作:

十六进制(x)

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


0
投票

这是使用递归计算十六进制数字位数的程序

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


0
投票

您也可以在不使用 bit_length 方法转换为字符串的情况下执行此操作:

def hexLen(N): 
    return (N.bit_length()+3)//4

请注意,当 N 为 0 时,他返回的长度为零,您的函数将返回

None
,但实际上,您仍然需要一个十六进制数字来表示零。 (提示:添加
max(1,...)
以覆盖该边缘情况)

© www.soinside.com 2019 - 2024. All rights reserved.