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 )
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"),
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.
Ce n'est pas exactement ce que vous avez demandé mais vous pouvez utiliser la fonction" hex " en python:
>>> hex(15)
'0xf'
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']
Si Sans '0x'
préfixe:
'{0:x}'.format(int(dec))
Sinon, utilisez la fonction hex()
intégrée.
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'
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
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.
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:]
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])
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]
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).
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
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.