Ich habe hier eine Funktion, die dezimal in hex konvertiert, aber in umgekehrter Reihenfolge druckt. Wie würde ich das beheben?
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 )
Wenn Sie diesen Code selbst eingeben möchten, anstatt die integrierte Funktion hex()
zu verwenden, können Sie einfach den rekursiven Aufruf ausführen, bevor Sie die aktuelle Ziffer drucken:
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"),
Was ist mit diesem:
hex(dec).split('x')[-1]
Beispiel:
>>> d = 30
>>> hex(d).split('x')[-1]
'1e'
~ Reich
Wenn Sie -1 als Ergebnis von split () verwenden, funktioniert dies auch, wenn split eine Liste mit einem Element zurückgibt.
Das ist nicht genau das, wonach Sie gefragt haben, aber Sie können die "Hex" -Funktion in Python verwenden:
>>> hex(15)
'0xf'
Ich finde diese Lösung elegant:
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]
Diese Ausgabe:
['0', 'B', '10', '20', '21', '29', '2D', '2A6', '8C5AD']
['0x0', '0xb', '0x10', '0x20', '0x21', '0x29', '0x2d', '0x2a6', '0x8c5ad']
Ich benutze
"0x%X" % n
dabei ist n
die zu konvertierende Dezimalzahl.
Wenn ohne '0x'
-Präfix:
'{0:x}'.format(int(dec))
verwenden Sie andernfalls die integrierte Funktion hex()
.
Die String-Formatmethode von Python kann eine Formatspezifikation annehmen.
Von Dezimal bis Binär
"{0:b}".format(154)
'10011010'
Von Dezimal bis Oktal
"{0:o}".format(154)
'232'
Von dezimal bis hexadezimal
"{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()
Dies ist das dichteste, das ich für die Konvertierung von Dezimal- in Hexadezimalzahlen verwenden könnte. HINWEIS: Dies ist in Python Version 3.5.1
Abgesehen von der eingebauten Funktion hex () funktioniert dies gut:
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]))
Dies funktioniert jedoch nur für die Umwandlung von Dezimalzahlen bis zu 255 (um eine 2-stellige Hex-Zahl zu erhalten).
So benutze ich es am besten
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
Beispiel:
>>> decimal = 53350632996854
>>> hexadecimal = hex(decimal).lstrip("0x")
>>> print(hexadecimal)
3085a9873ff6
Wenn Sie es in Großbuchstaben benötigen, können Sie "obere Funktion" verwenden. Zum Beispiel:
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"),
Um einen reinen Hex-Wert zu erhalten, kann dies nützlich sein. Es basiert auf Joes Antwort:
def gethex(decimal):
return hex(decimal)[2:]
Anstatt alles in der Funktion auszudrucken, können Sie einfach zulassen, dass der Wert in Hex zurückgegeben wird, und Sie können mit dem tun, was Sie möchten.
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))
Es gibt wahrscheinlich elegantere Wege, die alphabetischen Komponenten des Hex zu analysieren, anstatt nur Conditionals zu verwenden.
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]
Eine Version mit Iteration:
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])