Eri*_*ric 44 python hex function decimal
我有一个函数将十进制转换为十六进制,但它以相反的顺序打印它.我该如何解决?
def ChangeHex(n):
if (n < 0):
print(0)
elif (n<=1):
print(n)
else:
x =(n%16)
if (x < 10):
print(x),
if (x == 10):
print("A"),
if (x == 11):
print("B"),
if (x == 12):
print("C"),
if (x == 13):
print("D"),
if (x == 14):
print("E"),
if (x == 15):
print ("F"),
ChangeHex( n / 16 )
Run Code Online (Sandbox Code Playgroud)
小智 87
那这个呢:
hex(dec).split('x')[-1]
Run Code Online (Sandbox Code Playgroud)
例:
>>> d = 30
>>> hex(d).split('x')[-1]
'1e'
Run Code Online (Sandbox Code Playgroud)
〜丰富
通过在split()的结果中使用-1,即使split返回了1个元素的列表,这也可以工作.
Jos*_*see 35
这不是你要求的,但你可以在python中使用"hex"函数:
>>> hex(15)
'0xf'
Run Code Online (Sandbox Code Playgroud)
Sve*_*ach 23
如果你想自己编写代码而不是使用内置函数hex(),你可以在打印当前数字之前简单地进行递归调用:
def ChangeHex(n):
if (n < 0):
print(0)
elif (n<=1):
print n,
else:
ChangeHex( n / 16 )
x =(n%16)
if (x < 10):
print(x),
if (x == 10):
print("A"),
if (x == 11):
print("B"),
if (x == 12):
print("C"),
if (x == 13):
print("D"),
if (x == 14):
print("E"),
if (x == 15):
print ("F"),
Run Code Online (Sandbox Code Playgroud)
Lyn*_*nch 20
我觉得这个解决方案很优雅:
def toHex(dec):
x = (dec % 16)
digits = "0123456789ABCDEF"
rest = dec / 16
if (rest == 0):
return digits[x]
return toHex(rest) + digits[x]
numbers = [0, 11, 16, 32, 33, 41, 45, 678, 574893]
print [toHex(x) for x in numbers]
print [hex(x) for x in numbers]
Run Code Online (Sandbox Code Playgroud)
这个输出:
['0', 'B', '10', '20', '21', '29', '2D', '2A6', '8C5AD']
['0x0', '0xb', '0x10', '0x20', '0x21', '0x29', '0x2d', '0x2a6', '0x8c5ad']
Run Code Online (Sandbox Code Playgroud)
nik*_*ioa 14
如果没有'0x'前缀:
'{0:x}'.format(int(dec))
Run Code Online (Sandbox Code Playgroud)
否则使用内置hex()功能.
Python的字符串格式方法可以采用格式规范.
从十进制到二进制
"{0:b}".format(154)
'10011010'
Run Code Online (Sandbox Code Playgroud)
从十进制到八进制
"{0:o}".format(154)
'232'
Run Code Online (Sandbox Code Playgroud)
从十进制到十六进制
"{0:x}".format(154)
'9a'
Run Code Online (Sandbox Code Playgroud)