J'ai une fonction ici qui convertit le nombre décimal en hexadécimal, mais elle l'affiche 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 )
Si vous souhaitez le 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"),
Et ça:
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 d'un é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']
J'utilise
"0x%X" % n
où n
est le nombre décimal à convertir.
Si sans le préfixe '0x'
:
'{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.
De décimal à binaire
"{0:b}".format(154)
'10011010'
De décimal à octal
"{0:o}".format(154)
'232'
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 j'ai pu faire pour convertir décimal en hexadécimal. NOTE: Ceci est dans la version 3.5.1 de Python
En plus d'utiliser la fonction hex () intégrée, 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 allant jusqu'à 255 (pour donner un nombre hexadécimal à deux chiffres).
C'est la meilleure façon de l'utiliser
hex(53350632996854).lstrip("0x").rstrip("L")
# lstrip helps remove "0x" from the left
# rstrip helps remove "L" from the right
# L represents a long number
Exemple:
>>> decimal = 53350632996854
>>> hexadecimal = hex(decimal).lstrip("0x")
>>> print(hexadecimal)
3085a9873ff6
si vous en avez besoin majuscule, vous pouvez utiliser "fonction supérieure" Par exemple:
decimal = 53350632996854
hexadecimal = hex(decimal).lstrip("0x").upper()
print(hexadecimal)
3085A9873FF6
n = eval(input("Enter the number:"))
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"),
Pour obtenir une valeur hexadécimale pure, cela pourrait être utile. C'est basé sur la réponse de Joe:
def gethex(decimal):
return hex(decimal)[2:]
Au lieu de tout imprimer dans la fonction, vous pouvez simplement lui permettre de renvoyer la valeur en hexadécimal et de faire ce que vous voulez.
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 manières plus élégantes d’analyser les composants alphabétiques de l’hex, au lieu d’utiliser des conditionnelles.
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]
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])