53 votes

Python convertir décimal en hexadécimal

J'ai une fonction qui convertit le décimal en hexadécimal mais qui l'imprime dans l'ordre inverse. Comment puis-je résoudre ce problème ?

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 )

101voto

Rich Points 991

Qu'en est-il de ceci ?

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

Exemple :

>>> d = 30
>>> hex(d).split('x')[-1]
'1e'

~Rich

En utilisant -1 dans le résultat de split(), cela fonctionnerait même si split renvoyait une liste de 1 élément.

3 votes

47voto

Joe Points 1396

Ce n'est pas exactement ce que vous avez demandé, mais vous pouvez utiliser la fonction "hex" en python :

>>> hex(15)
'0xf'

0 votes

Print hex(15) ; TypeError : l'objet 'str' n'est pas appelable

2 votes

@Babbit Alors vous faites quelque chose de mal. Vous avez probablement nommé une variable hexagonale ou quelque chose comme ça.

26voto

Sven Marnach Points 133943

Si vous souhaitez coder vous-même au lieu d'utiliser la fonction intégrée hex() vous pouvez simplement effectuer l'appel récursif avant d'imprimer le chiffre actuel :

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 votes

@Apostolos Non, je ne pense pas que ce soit le cas. Qu'est-ce qui vous fait penser cela ? Cependant, je pense qu'il est utile pour l'auteur de la question d'apprendre à corriger son code, même si ce n'est pas la solution que je recommanderais dans un "vrai" code.

0 votes

ChangeHex( n / 16 ) ou ChangeHex( n // 16 ) ?

2 votes

@sortas n // 16 dans Python 3. Cette réponse a été écrite pour Python 2, et dans cette version les deux sont équivalents. (J'ai essayé de modifier le moins possible le code de la question pour qu'il fonctionne).

26voto

Lynch Points 2534

Je pense que cette solution est élégante :

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]

Cette sortie :

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

19voto

thanos Points 217

J'utilise

"0x%X" % n

donde n est le nombre décimal à convertir.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X