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

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个元素的列表,这也可以工作.

  • /sf/answers/2502540351/ [Martijn Pieter's](/sf/users/7020821/) `format(15, 'x')` (2认同)

Jos*_*see 35

这不是你要求的,但你可以在python中使用"hex"函数:

>>> hex(15)
'0xf'
Run Code Online (Sandbox Code Playgroud)

  • @Babbit然后您在做错事。您可能将变量命名为十六进制或其他名称。 (2认同)

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)

  • @Apostolos不,我认为不是.是什么让你这么想的?但是,我认为问题的原始海报有助于学习如何修复代码,即使这不是我建议在"真实"代码中使用的解决方案. (6认同)
  • @sortas `n // 16` in Python 3. 这个答案是为 Python 2 编写的,在那个版本中,两者是等价的。(我试图对问题中的代码进行最小的更改以使其工作。) (2认同)

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)


tha*_*nos 16

我用

"0x%X" % n
Run Code Online (Sandbox Code Playgroud)

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


nik*_*ioa 14

如果没有'0x'前缀:

'{0:x}'.format(int(dec))
Run Code Online (Sandbox Code Playgroud)

否则使用内置hex()功能.


cja*_*gir 9

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)

格式化Python 2的规范文档

格式化Python 3的规范文档