Python将十进制转换为十六进制

56

我这里有一个将十进制转换为十六进制的函数,但是它打印出来的顺序是反的。我该如何修复它?

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 )

答案与重复发明轮子有关。要将整数转换为十六进制表示的答案,请参见builtin "hex" - user
24个回答

106

这个怎么样:

hex(dec).split('x')[-1]

例子:

>>> d = 30
>>> hex(d).split('x')[-1]
'1e'
使用split()方法时,如果返回的是只有一个元素的列表,可以通过在结果中使用-1来实现功能。

3
format(15, 'x') 将整数 15 转换为十六进制字符串,结果为 'f' - Germa Vinsmoke

48

这不完全是您要求的,但您可以在Python中使用“hex”函数:

>>> hex(15)
'0xf'

打印十六进制(15); 类型错误:'str'对象不可调用。 - Moirisa Dikaiosýni
3
那你肯定做错了什么。你可能给一个变量取名为"hex"或者其他的名称。 - Zizouz212

26

如果你想自己编写代码而不使用内置函数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"),

7
不,我不认为是这样的。你为什么这么想呢?然而,我认为对于问题的原始发布者来说学习如何修复他们的代码是有用的,即使这不是我推荐在“真实”代码中使用的解决方案。 - Sven Marnach
ChangeHex( n / 16 ) 还是 ChangeHex( n // 16 )? - sortas
2
在Python 3中,@sortas n // 16。这个答案是为Python 2编写的,在那个版本中两者是等价的。(我尝试对问题中的代码进行最小的更改以使其工作。) - Sven Marnach

26

我认为这个解决方案很优雅:

def toHex(dec):
    digits = "0123456789ABCDEF"
    x = (dec % 16)
    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]

这个输出:

['0', 'B', '10', '20', '21', '29', '2D', '2A6', '8C5AD']
['0x0', '0xb', '0x10', '0x20', '0x21', '0x29', '0x2d', '0x2a6', '0x8c5ad']

20

我使用

"0x%X" % n

其中n是要转换的十进制数。


15

如果没有'0x'前缀:

'{0:x}'.format(int(dec))

否则使用内置的hex()函数。



15

Python的字符串格式化方法可以接受格式规范。

十进制转换为二进制

"{0:b}".format(154)
'10011010'

十进制八进制

"{0:o}".format(154)
'232'

十进制 转换为 十六进制

"{0:x}".format(154)
'9a'

Python 2格式规范文档

Python 3格式规范文档


2
你可以使用这种使用切片的方法。
output = hex(15)[2:]

它会从输出中剪切掉前两个字符(0x)。

2

编写自己的数字系统转换函数是一个很好的学习方式。但是,在“真正”的代码中,我建议使用Python内置的转换函数,例如bin(x)hex(x)int(x)


2

如果您需要返回偶数个字符,可以使用以下代码:

def int_to_hex(nr):
  h = format(int(nr), 'x')
  return '0' + h if len(h) % 2 else h

示例

int_to_hex(10) # 返回: '0a'

int_to_hex(1000) # 返回: '03e8'

注:本文介绍了两个函数,用于将整数转换为十六进制字符串。

完美的解决方案,再加上示例。谢谢您先生。 - Meto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接