2014-01-14 283 views
3

我正在尝试执行以下操作;十六进制()参数不能转换为十六进制

pin = hex("2FFF6996").replace('L', '').upper()[2:].zfill(8) 

但是我收到一个错误 - 十六进制()参数不能转换为十六进制。

任何帮助,将不胜感激!

+1

怎么样'销= “2FFF6996”'? –

+0

@alko'hex()'也可以输出'L'。在Python 2上尝试'十六进制(2 ** 32)'。 –

+0

@JanneKarila你是对的,谢谢 – alko

回答

3
pin = hex(int("2FFF6996".replace('L', '').upper()[2:].zfill(8), 16)) 

>>> pin 
'0xff6996' 

你可以删除upperhex,如果你想从数字符串将它传递给print功能就像一个%X参数:

>>> pin = int("2FFF6996".replace('L', '')[2:].zfill(8), 16) 
>>> pin 
16738710 
>>> print "0x%X" % pin 
0xFF6996 
+0

谢谢,这工作。但是,我将pin变量传递给另一个函数,该函数使用'%X'。不知道我做得对,因为我得到一个TypeError - '%X格式:一个数字是必需的,而不是一个str' –

+0

@TomSothcott只留下int:'pin = int(“2FFF6996”.replace('L', '').upper()[2:] .zfill(8),16)' – ndpu

2

六角需要一个数,以便有效的选项有:

hex(0x2FFF6996) # hex 
hex(805267862) # 10 base 
hex(05777664626) # 8 base 

这些都产生以下结果: “0x2fff6996”

0

hex的整数转换为十六进制字符串(见docs)因此错误。

看来你已经有了一个十六进制字符串,除了领先的“0X”所以这可能就是你所需要的东西:

"2FFF6996".replace('L', '').upper()[2:].zfill(8)