Wie konvertiere ich eine Hex-Zeichenfolge in Python in ein Int?
Ich kann es als " 0xffff
" oder nur " ffff
" haben.
Ohne das Präfix 0x müssen Sie die Basis explizit angeben, andernfalls können Sie nicht sagen:
x = int("deadbeef", 16)
Mit dem Präfix 0x kann Python Hex und Dezimal automatisch unterscheiden.
>>> print int("0xdeadbeef", 0)
3735928559
>>> print int("10", 0)
10
(Sie müssen0
als Basis angeben , um dieses Verhalten beim Erraten von Präfixen aufzurufen. Wenn Sie den zweiten Parameter weglassen, wird die Basis 10 angenommen.)
int("FFFF",16)
in -1 konvertiert werden.int(hexString, 16)
macht den Trick und arbeitet mit und ohne das Präfix 0x:quelle
Für eine bestimmte Zeichenfolge s:
quelle
Um eine Zeichenfolge in eine int zu konvertieren, übergeben Sie die Zeichenfolge
int
zusammen mit der Basis, von der Sie konvertieren.Beide Zeichenfolgen reichen für die Konvertierung auf folgende Weise aus:
Letting
int
inferWenn Sie 0 als Basis übergeben,
int
wird die Basis aus dem Präfix in der Zeichenfolge abgeleitet.Ohne den hexadezimalen Präfix
0x
,int
nicht genügend Informationen , mit denen zu erraten:Literale:
Wenn Sie in Quellcode oder einen Interpreter eingeben, führt Python die Konvertierung für Sie durch:
Dies funktioniert nicht,
ffff
da Python denkt, dass Sie stattdessen versuchen, einen legitimen Python-Namen zu schreiben:Python-Zahlen beginnen mit einem numerischen Zeichen, während Python-Namen nicht mit einem numerischen Zeichen beginnen können.
quelle
Hinzu kommt zu Dans Antwort oben: Wenn Sie die Funktion int () mit einer Hex-Zeichenfolge versehen, müssen Sie die Basis als 16 angeben, da Sie sonst nicht glauben, dass Sie ihr einen gültigen Wert gegeben haben. Die Angabe der Basis 16 ist für Hex-Zahlen, die nicht in Zeichenfolgen enthalten sind, nicht erforderlich.
quelle
Der schlimmste Weg:
Bitte tu das nicht!
Ist die Verwendung von eval in Python eine schlechte Praxis?
quelle
eval
neben all den anderen Problemen auch absurd langsam ist.int(s,16)
Rückgabe falscher Werte aufgetreten sind, die einige Hauptprobleme mit meiner Laufzeit verursacht haben (int(hex(value),16) == int(value) >>> False
). Die an übergebene Zeichenfolgeeval()
war sicher und der zurückgegebene Wert war korrekt.Oder
ast.literal_eval
(dies ist im Gegensatz zu sichereval
):Demo:
quelle
Die Formatierungsoption '% x'% scheint auch in Zuweisungsanweisungen für mich zu funktionieren. (Angenommen, Python 3.0 und höher)
Beispiel
quelle
print(b)
wird ausgeben256
, nicht100
undprint(c)
wird ausgeben100
, nicht256
. Beachten Sie auch, dass diesc
eine Zeichenfolge ist, abera
nicht so, dass Ihre Antwort tatsächlich ein int in eine Zeichenfolge konvertiert, nicht umgekehrt (darum geht es in der Frage).Wenn Sie den Python-Interpreter verwenden, können Sie einfach 0x (Ihren Hex-Wert) eingeben und der Interpreter konvertiert ihn automatisch für Sie.
quelle
Behandelt Hex, Oktal, Binär, Int und Float
Unter Verwendung der Standardpräfixe (dh 0x, 0b, 0 und 0o) konvertiert diese Funktion jede geeignete Zeichenfolge in eine Zahl. Ich habe dies hier beantwortet: https://stackoverflow.com/a/58997070/2464381, aber hier ist die benötigte Funktion.
quelle
In Python 2.7
int('deadbeef',10)
scheint nicht zu funktionieren.Folgendes funktioniert für mich:
quelle
Mit dem Präfix '0x' können Sie auch die Auswertungsfunktion verwenden
Zum Beispiel
quelle
ast.literal_eval
.