it-swarm.com.de

Python konvertiert Dezimal in Hex

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 )
38
Eric

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"),
21
Sven Marnach

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. 

84
Rich

Das ist nicht genau das, wonach Sie gefragt haben, aber Sie können die "Hex" -Funktion in Python verwenden:

>>> hex(15)
'0xf'
32
Joseph Lisee

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']
20
Lynch

Ich benutze 

"0x%X" % n

dabei ist n die zu konvertierende Dezimalzahl.

16
thanos

Wenn ohne '0x'-Präfix:

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

verwenden Sie andernfalls die integrierte Funktion hex().

13
nikioa

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'

Spezifikationsdokumente für Python 2 formatieren

Spezifikationsdokumente für Python 3 formatieren

8
cjahangir
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

1
John

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).

0
John Skeen

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
0
Mohammed Towfiq
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"),
0
Ermias Asmare

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.

0
voithos
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
Shiv Konar

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])
0
Youngsup Kim