Python convertir décimal en hexadécimal

J'ai ici une fonction qui convertit la décimale en hexadécimal mais elle l'imprime dans l'ordre inverse. Comment pourrais-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 )
33
demandé sur ʇsәɹoɈ 2011-04-27 00:45:15

15 réponses

Si vous voulez ce code vous-même au lieu d'utiliser la fonction intégrée hex(), vous pouvez simplement faire l'appel récursif avant d'imprimer le chiffre en cours:

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"),
17
répondu Sven Marnach 2011-04-26 20:47:37

Qu'en est-il de ceci:

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

Exemple:

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

~Riches

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

76
répondu Rich 2017-03-17 16:39:03

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

>>> hex(15)
'0xf'
32
répondu Joseph Lisee 2013-12-04 21:40:43

Je pense que cette solution est élégante:

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]

Cette sortie:

['0', 'B', '10', '20', '21', '29', '2D', '2A6', '8C5AD']
['0x0', '0xb', '0x10', '0x20', '0x21', '0x29', '0x2d', '0x2a6', '0x8c5ad']
19
répondu Lynch 2012-05-01 22:27:35

J'utilise

"0x%X" % n

n est le nombre décimal à convertir.

14
répondu thanos 2014-06-17 15:49:12

Si Sans '0x' préfixe:

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

Sinon, utilisez la fonction hex() intégrée.

13
répondu nikioa 2014-11-26 08:39:18

La méthode de format de chaîne de Python peut prendre une spécification de format.

À Partir de décimal à binaire

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

À Partir de décimal à octal

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

À Partir de décimal à hexadécimal

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

Format spec docs pour Python 2

Format spec docs pour Python 3

7
répondu cjahangir 2016-10-19 20:29:02
def main():
    result = int(input("Enter a whole, positive, number to be converted to hexadecimal: "))
    hexadecimal = ""
    while result != 0:
        remainder = changeDigit(result % 16)
        hexadecimal = str(remainder) + hexadecimal
        result = int(result / 16)
    print(hexadecimal)

def changeDigit(digit):
    decimal =     [10 , 11 , 12 , 13 , 14 , 15 ]
    hexadecimal = ["A", "B", "C", "D", "E", "F"]
    for counter in range(7):
        if digit == decimal[counter - 1]:
            digit = hexadecimal[counter - 1]
    return digit

main()

C'est le plus dense que je puisse faire pour convertir décimal en hexadécimal. NOTE: Ceci est dans la version python 3.5.1

1
répondu John 2017-07-29 01:17:11

Au lieu d'imprimer tout dans la fonction, vous pouvez simplement lui permettre de retourner la valeur en hexadécimal, et faire ce que vous voulez avec elle.

def ChangeHex(n):
    x = (n % 16)
    c = ""
    if (x < 10):
        c = x
    if (x == 10):
        c = "A"
    if (x == 11):
        c = "B"
    if (x == 12):
        c = "C"
    if (x == 13):
        c = "D"
    if (x == 14):
        c = "E"
    if (x == 15):
        c = "F"

    if (n - x != 0):
        return ChangeHex(n / 16) + str(c)
    else:
        return str(c)

print(ChangeHex(52))

Il existe probablement des façons plus élégantes d'analyser les composants alphabétiques de l'hexagone, au lieu de simplement utiliser des conditionnels.

0
répondu voithos 2011-04-26 22:01:45

Pour obtenir une valeur hexadécimale pure, cela peut être utile. Il est basé sur la réponse de Joe:

def gethex(decimal):
    return hex(decimal)[2:]
0
répondu SignatureSmileyfaceProductions 2016-09-04 06:41:47

Une version utilisant l'itération:

def toHex(decimal):
    hex_str = ''
    digits = "0123456789ABCDEF"
    if decimal == 0:
       return '0'

    while decimal != 0:
        hex_str += digits[decimal % 16]
        decimal = decimal // 16

    return hex_str[::-1] # reverse the string

numbers = [0, 16, 20, 45, 255, 456, 789, 1024]
print([toHex(x) for x in numbers])
print([hex(x) for x in numbers])
0
répondu Youngsup Kim 2017-09-25 14:49:32
hex_map = {0:0, 1:1, 2:2, 3:3, 4:4, 5:5, 6:6, 7:7, 8:8, 9:9, 10:'A', 11:'B', 12:'C', 13:'D', 14:'E', 15:'F'}

def to_hex(n):
    result = ""
    if n == 0:
        return '0'
    while n != 0:
        result += str(hex_map[(n % 16)])
        n = n // 16
    return '0x'+result[::-1]
0
répondu Shiv Konar 2018-01-30 13:42:39

En dehors de l'utilisation de la fonction intégrée hex (), cela fonctionne bien:

letters = [0,1,2,3,4,5,6,7,8,9,'A','B','C','D','E','F']
decimal_number = int(input("Enter a number to convert to hex: "))
print(str(letters[decimal_number//16])+str(letters[decimal_number%16]))

Cependant, cela ne fonctionne que pour convertir des nombres décimaux jusqu'à 255 (pour donner un nombre hexadécimal à deux digets).

0
répondu John Skeen 2018-08-20 17:47:11

Approche non récursive pour convertir la décimale en hexadécimal

def to_hex(dec):

    hex_str = ''
    hex_digits = ('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F')
    rem = dec % 16

    while dec >= rem:
        remainder = dec % 16
        quotient = dec / 16
        if quotient == 0:
            hex_str += hex_digits[remainder]
        else:
            hex_str += str(remainder)
        dec = quotient

    return hex_str[::-1] # reverse the string
-1
répondu Chandler 2014-04-26 12:23:53
dec = int(input("Enter a number below 256: "))
hex1 = dec // 16

if hex1 >= 10:
    hex1 = hex(dec)

hex2 = dec % 16
if hex2 >= 10:
    hex2 = hex(hex2)

print(hex1.strip("0x"))

Fonctionne bien.

-1
répondu TXVXT 2018-05-04 11:39:11