在 Python 中将十六进制转换为十进制 非常快!

数据可以以多种格式记录。对于数据记录来说,不存在一种通用的格式。根据收集数据的目的或来源,用于记录数据的格式差异很大。但是,在数据分析方面,人们面临着协调不同格式数据的任务。

格式的同质性对于分析数据至关重要,本文将详细介绍 Python 中的数据转换技术来建立这种同质性。更具体地说,本文将讨论使用 Python将数据从十六进制转换十进制。

应采用以下任何最适合目的的方法进行转换。

  • 使用int()函数
  • 使用literal_eval () 函数
  • 使用for 循环
  • 使用while 循环

方法一 – 使用 int( ) 函数

此方法利用int( ), Python 中的一个内置函数,用于将给定的十六进制数据转换为十进制格式。以下代码演示了int()函数的工作原理。必须在输入变量后面提供基数 16,以指示int()函数将其转换为十六进制。

hex = '75FC'    
dec = int(hex, 16)      
print ('Input hexadecimal value:', hex, '\n', 'Converted decimal value:', dec)

运行上面的代码会显示以下结果。

使用int( )函数将十六进制转为十进制

方法二 – 使用literal_eval()函数

对于那些不希望在int()函数中输入基值并希望函数本身处理所有转换的人来说,那么literal_eval ()函数可能正是您正在寻找的东西!

该函数只需要输入即可预测数据格式并将其转换为等效的十进制版本。需要注意的是,该函数位于ast库中。所以,只有导入后才有效!

以下代码演示了该函数的工作原理。

from ast import literal_eval                 
hex = '0x75FC'                  
dec = literal_eval(hex)                  
print ('Input hexadecimal value:', hex, '\n', 'Converted decimal value:', dec)
使用literal_eval()函数将十六进制转换为十进制

方法 III – 使用 for 循环

对于那些热衷于展示自己的编码技能而不依赖于 Python 内置函数的人来说,十六进制到十进制的转换也可以使用 for 循环来完成但这项技术是有先决条件的!

人们应该创建一个包含所有十六进制的十进制等价物的字典,如下所示。只有有了这些信息,for 循环才能与给定的输入进行比较,并在转换后返回结果。

Ref = {'0':0, '1':1, '2':2, '3':3, '4':4, '5':5, '6':6, '7':7, '8':8, '9':9,
       'A':10, 'B':11, 'C':12, 'D':13, 'E':14, 'F':15}

完成后,让我们将变量“r”分配为零并将输入的最大功率值分配给另一个变量“s”。

r = 0                  
s = len(hex)-1

现在,应构造一个for 循环,其中变量“r”提升为“s”次方,并且“s”在每次运行中递减“1”,如下所示。

for num in hex:
r = r+Ref[num]*16**s
s = s-1

以下是上述代码运行时的结果。

十六进制转十进制使用for循环

方法 IV – 使用 while 循环

还有另一种方法可以将十六进制数据转换为十进制数据,而无需使用Python的内置函数,这次是通过while循环。现在让我们接受输入而不是输入数据并使用下面的代码将其转换为十进制。

hex = input("Input hexadecimal value: ") .strip( ).upper( )

strip ()upper()函数用于删除空格并将字母从给定的输入转换为大写。然后,通过while 循环运行进行转换。

l = count = i = 0
s = len(hex)-1
while s>=0:
    if hex[s]>='0' and hex[s]<='9':
        r = int(hex[s])
    elif hex[s]>='A' and hex[s]<='F':
        r = ord(hex[s])-55
    else:
        l = 1
        break
    count = count+(r*16**i)
    s = s-1
    i = i+1 
if l == 0:
    print('Converted decimal value:', count)
else:
    print('Incorrect input')
使用while 循环将十六进制转为十进制

结论

现在我们已经到了本文的结尾,希望它已经详细说明了将输入数据从十六进制转换为十进制的不同技术。这是另一篇文章,详细介绍了Python 中numpy库中的linalg.matrix_rank()函数的工作原理。AskPython中还有许多其他有趣且内容丰富的文章,可能对那些希望提高 Python 水平的人有很大帮助。及时行乐!


参考